<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-33041597313956388</id><updated>2024-11-01T16:05:23.355+05:30</updated><category term="Proideaclub"/><category term="proideaclub blogs"/><category term="rultech blogs"/><category term="Android"/><category term="ios"/><category term="SMS"/><category term="notification"/><category term="rultech"/><category term="Testing"/><category term="sms notification"/><category term="sms toast"/><category term="Acquisition"/><category term="Android 3.1 Platform"/><category term="Android Application"/><category term="Android Wallpaper Changer"/><category term="Anti Insects"/><category term="Anti Mosquito."/><category term="Business"/><category term="Change Wallpaper"/><category term="Facebook SMS"/><category term="FingerKbPad"/><category term="Marketing"/><category term="Mobile User"/><category term="Popup Sms"/><category term="Popup Sms pro"/><category term="Popup facebook"/><category term="Remote Control"/><category term="Remote keyboard."/><category term="Remote mouse"/><category term="SMS 2 facebook"/><category term="SMS to Facbook"/><category term="Social Texts"/><category term="UI Design"/><category term="UITextView"/><category term="Unit"/><category term="Unit Testing"/><category term="Wallaper Changer"/><category term="bugs"/><category term="development"/><category term="facebook"/><category term="facebook notification"/><category term="facebook popup"/><category term="facebook toast"/><category term="iOS 7"/><category term="iPhone"/><category term="keyboard"/><category term="sms popup"/><category term="sms popup pro"/><category term="wallaper changer facebook"/><category term="wallpaper changer flickr"/><category term="xcode"/><title type='text'>RulTech Solutions Private Limited</title><subtitle type='html'>Total IT Solution (Innovate with Skills)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01990980682713835863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-7116752309916258870</id><published>2014-03-03T11:50:00.000+05:30</published><updated>2014-03-03T11:50:05.740+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="bugs"/><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>Common Bugs When Testing iOS Apps</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
The bugs we’ve encountered ranged from app specific usability issues to general issues common amongst many apps. Today, we want to highlight 5 issues that we’ve encountered repeatedly, using some of the most popular apps as examples. The list below is presented in no particular order.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;1. Handling Bad Network Connections&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
iOS devices are inherently mobile, so apps cannot assume permanent, fast connections to the internet. Tasks requiring network connections should generally be asynchronous and notify the user if they fail due to lack of connectivity. Facebook Messenger and iOS FaceTime handles this nicely.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In Facebook Messenger, a warning message is displayed&amp;nbsp;prominently, indicating that Internet connection is required for the app to function.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In FaceTime, an alert is displayed with buttons that take the user directly to network settings.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
On the other hand, Vine and Instagram do not handle this well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In Vine, users see a sad face and posts simply do not load. There’s no indication that this is caused by network connectivity.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Instagram shows a large reload button on&amp;nbsp;images&amp;nbsp;that cannot load. This button has no effect while network is off.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;2. Handling Chinese (extended) Keyboard&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
iOS has a number of international keyboards built in. While most of these keyboards are of the same size, a few keyboards have extended sections. The Chinese Pinyin keyboard is an example of the extended keyboard. Apps should not assume a fixed keyboard size and should adjust their content appropriately.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
The Google+ app, as shown above, has a small button above the normal keyboard that hides the keyboard when pressed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
However, when the Chinese keyboard is used, the&amp;nbsp;extended keyboard covers most of&amp;nbsp;the&amp;nbsp;button, rendering it useless.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Using the device in&amp;nbsp;landscape mode exacerbates the problem. In Twitter, the extended keyboard, custom buttons, navigation bar, and status bar combined take up almost the entire screen,&amp;nbsp;leaving no room to display the input text field.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;3. Handling Privacy Settings&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
iOS privacy settings control third party app access to photos, locations, and contacts. Apps needing access to these assets need to handle cases when access has been denied either inside the app or outside through system settings. A great way to handle this is to let the users know about the necessary permissions and give them instructions on how to turn them on.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A good example of how to handle this is the Facebook app. When it lacks permission to access location, it shows a clear message with step-by-step instructions for users on how to grant access.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
On the other hand, when Vine lacks permission to&amp;nbsp;access&amp;nbsp;location, it gets stuck searching for nearby places with no indication of what’s wrong.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;4. Validating User Input&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Many apps allow users to input username, birthdate, or other account information. Basic input validation should be implemented, and if the user’s input is invalid, a clear explanation should be presented.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Skype does not validate user’s birthdate, so a completely bogus date can be entered.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Path has very few restrictions for usernames. In the screenshot above, the username is set to a large number of blank spaces followed by a period. Path does not allow usernames to contain only blank spaces and will fail silently (i.e. it does not save the username and shows no&amp;nbsp;explanation).&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;5. Handling Simultaneous&amp;nbsp;Button Presses&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
iOS devices support multi-touch and apps should properly handle cases when users intentionally or accidentally touch multiple buttons at the same time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In Pinterest, tapping ‘Pin it’ and ‘Send’ at the same time when viewing a pin will cause the app to enter a bad state.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
As we’ve illustrated above, common issues can be found even in some of the most popular and mature apps. By sharing experiences we gained from testing, we hope to help improve apps built by our readers. There’s a lot more we’d like to share in future posts. If you have any thoughts or questions regarding testing, don’t hesitate to contact us at&amp;nbsp;&lt;a href=&quot;mailto:support@rultech.com&quot;&gt;&lt;b&gt;support@rultech.com&lt;/b&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.wordpress.com/&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- Wordpress&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.blogspot.com/&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- Blogspot&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&amp;nbsp;- Knowledge Base&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&amp;nbsp;- Blog&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://proideaclub.blogspot.in/&quot;&gt;Pro!deaClub&lt;/a&gt;&amp;nbsp;- Blogspot&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/7116752309916258870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/03/common-bugs-when-testing-ios-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/7116752309916258870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/7116752309916258870'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/03/common-bugs-when-testing-ios-apps.html' title='Common Bugs When Testing iOS Apps'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-8342847778020320913</id><published>2014-02-23T10:44:00.001+05:30</published><updated>2014-02-23T10:44:24.867+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="xcode"/><title type='text'>Usefull Plugins for Xcode</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;What’s this all about?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
This is just a short collection of some useful Xcode 4/5 plugins I use. Most of us Cocoa developers, I guess, are looking about for making our development environment a more friendly and “warm” place with features enriching the development experience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
This list is far off being complete and will be extended permanently. So if you like it you should take a look at it from time to time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;UncrustifyX&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Xcode plugin to uncrustify the source code opened in the editor.&lt;br /&gt;
&lt;a href=&quot;https://github.com/benoitsan/BBUncrustifyPlugin-Xcode&quot;&gt;UncrustifyX Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;XCFixins&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
This project includes plugins (known as fixins) that extend Xcode and fix some of its annoying behaviors.&lt;br /&gt;
&lt;a href=&quot;https://github.com/davekeck/Xcode-4-Fixins&quot;&gt;XCFixins Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Xcode_beginning_of_line&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
XCode 4 plugin to make HOME key jump to the first non-whitespace line of code.&lt;br /&gt;
&lt;a href=&quot;https://github.com/insanehunter/XCode4_beginning_of_line&quot;&gt;Xcode_beginning_of_line Of Line Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Dash Plugin for Xcode&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
This plugin allows you to use&amp;nbsp;&lt;a href=&quot;http://kapeli.com/&quot;&gt;Dash&lt;/a&gt;&amp;nbsp;(I think, this is a&amp;nbsp;&lt;b&gt;Must-Have!&lt;/b&gt;) instead of Xcode’s own documentation viewer when using option-click (or the equivalent keyboard shortcut) to view the documentation for the selected symbol.&lt;br /&gt;
&lt;a href=&quot;https://github.com/Kapeli/Dash-Plugin-for-Xcode&quot;&gt;Dash Plugin Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Exterminator&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A magic button in Xcode to exterminate the current project’s DerivedData directories.&lt;br /&gt;
&lt;a href=&quot;https://github.com/kattrali/deriveddata-exterminator&quot;&gt;Exterminator Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;KSImageNamed&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Xcode plug-in that provides autocomplete for&amp;nbsp;imageNamed:&amp;nbsp;calls.&lt;br /&gt;
&lt;a href=&quot;https://github.com/ksuther/KSImageNamed-Xcode&quot;&gt;KSImageNamed Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;ColorSense&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Plugin for Xcode to make working with colors more visual. Every time when place the cursor on a&amp;nbsp;UIColor/NSColor&amp;nbsp;code fragment it will show the current color of this code as an overlay. By clicking this color overlay you can edit the value just with the standard OS X color picker.&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;https://github.com/omz/ColorSense-for-Xcode&quot;&gt;ColorSense Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Mini Xcode&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
This is a plugin that makes it easier to run Xcode without the main toolbar. It adds keyboard shortcuts for selecting the active scheme and device, and a compact popup menu in the window title bar that shows the currently selected run configuration.&lt;br /&gt;
&lt;a href=&quot;https://github.com/Daij-Djan/MiniXcode&quot;&gt;Mini Xcode Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Lin&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Xcode4 plugin showing completion for&amp;nbsp;NSLocalizedString&amp;nbsp;andlocalizedStringForKey:value:table:.&lt;br /&gt;
&lt;a href=&quot;https://github.com/questbeat/Lin&quot;&gt;Lin Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;XVim&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
XVim is a Vim plugin for Xcode. The plugin intends to offer a compelling Vim experience without the need to give up any Xcode features..&lt;br /&gt;
&lt;a href=&quot;https://github.com/JugglerShu/XVim&quot;&gt;XVim Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Fuzzy Autocomplete for Xcode&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A Xcode 5 plugin that adds more flexible autocompletion rather than just prefix-matching.&lt;br /&gt;
Please read also this very interesting article of the developer of this plugin about the way of&amp;nbsp;&lt;a href=&quot;http://chen.do/blog/2013/10/22/reverse-engineering-xcode-with-dtrace/&quot;&gt;reverse engineering Xcode with dtrace&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;https://github.com/chendo/FuzzyAutocompletePlugin&quot;&gt;Fuzzy Autocomplete Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;XToDo&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A plugin to collect and list the TODO, FIXME, ???, !!!&lt;br /&gt;
&lt;a href=&quot;https://github.com/trawor/XToDo&quot;&gt;XToDo Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;ClangFormat&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
An Xcode plug-in to to use clang-format from in Xcode. With clang-format you can use Clang to format your code to styles such as LLVM, Google, Chromium, Mozilla, WebKit, or your own configuration.&lt;br /&gt;
&lt;a href=&quot;https://github.com/travisjeffery/ClangFormat-Xcode&quot;&gt;ClangFormat Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;VVDocumenter&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Xcode plug-in which helps you write Javadoc style documents easier.&lt;br /&gt;
I use this plugin constantly!&lt;br /&gt;
&lt;a href=&quot;https://github.com/onevcat/VVDocumenter-Xcode&quot;&gt;VVDocumenter Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;KFCocoaPodsPlugin&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Xcode plug-in for CocoaPods with pod commands/console output, user notifications &amp;amp;amp; code completion.&lt;br /&gt;
&lt;a href=&quot;https://github.com/ricobeck/KFCocoaPodsPlugin&quot;&gt;KFCocoaPodsPlugin Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Alcatraz&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Alcatraz is an open-source package manager for Xcode 5. It lets you discover and install plugins, templates and color schemes without the need for manually cloning or copying files. It installs itself as a part of Xcode and it feels like home.&lt;br /&gt;
&lt;a href=&quot;https://github.com/mneorr/Alcatraz&quot;&gt;Alcatraz Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;SCXcodeMiniMap&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
SCXcodeMiniMap is a plugin that adds a source editor MiniMap to Xcode.&lt;br /&gt;
&lt;a href=&quot;https://github.com/stefanceriu/SCXcodeMiniMap&quot;&gt;SCXcodeMiniMap Github-Repository&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.wordpress.com/&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- Wordpress&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.blogspot.com/&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- Blogspot&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&amp;nbsp;- Knowledge Base&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&amp;nbsp;- Blog&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://proideaclub.blogspot.in/&quot;&gt;Pro!deaClub&lt;/a&gt;&amp;nbsp;- Blogspot&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/8342847778020320913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/02/usefull-plugins-for-xcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/8342847778020320913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/8342847778020320913'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/02/usefull-plugins-for-xcode.html' title='Usefull Plugins for Xcode'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-5717464279827757290</id><published>2014-02-03T16:35:00.001+05:30</published><updated>2014-02-03T16:35:41.814+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><category scheme="http://www.blogger.com/atom/ns#" term="Unit"/><category scheme="http://www.blogger.com/atom/ns#" term="Unit Testing"/><title type='text'>Testing on Android : Unit Tests</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;JUnit Tests&lt;/span&gt;&lt;/h2&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;There&#39;s no reason you can&#39;t use normal JUnit 4 testing for Android applications... as long as you stay away from anything Android.&lt;br /&gt;&lt;br /&gt;Normally you compile against the SDK&#39;s android.jar, which contains nothing but stubbed methods that throw exceptions when run. &amp;nbsp;When you actually upload your APK to a device, it uses the device&#39;s implementations of all those stubs. &amp;nbsp;As a result, when running normal unit tests in your IDE, you get no access to those framework implementations (instead receiving mountains of exceptions). &amp;nbsp;This is not a big deal if you&#39;re testing some simple functionality that doesn&#39;t touch Android itself.&lt;br /&gt;&lt;br /&gt;Pros:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fast and easy&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;Cons:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Cannot use any Android framework classes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;The Android Testing Framework&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://developer.android.com/tools/testing/testing_android.html&quot;&gt;The Android testing framework&lt;/a&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;&amp;nbsp;is the official method of unit testing on Android. &amp;nbsp;It loads your application onto a device, then runs JUnit-based test suites. &amp;nbsp;Since it runs on the actual OS you can use the Android framework as you normally would in your application and can conduct a series of realistic tests that way.&lt;br /&gt;&lt;br /&gt;Ostensibly the testing framework is unit testing, but the slowness of having to fully compile and upload your app onto a device before executing any tests makes testing slow. &amp;nbsp;Plus, you have to make sure you&#39;ve got a device attached or an emulator running. &amp;nbsp;As a result, I might consider the testing framework for semi-regular tests (e.g., whenever you push a new commit, or nightly tests) but I would have trouble using them while actively developing.&lt;br /&gt;&lt;br /&gt;Pros:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Access to the Android framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;Cons:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Slow&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Requires attached device or running emulator&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Uses JUnit 3 (instead of the newer JUnit 4)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;Robolectric&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://robolectric.org/&quot;&gt;Robolectric&lt;/a&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;&amp;nbsp;is a project that unifies the speed of unit testing with the ability to access the Android framework. &amp;nbsp;It does this by implementing all those stubs with mocked classes.&lt;br /&gt;&lt;br /&gt;Having tried it out, it is lightning fast and works as expected. &amp;nbsp;I&#39;m also impressed with the amount of active development on it - this is a rapidly improving framework. &amp;nbsp;However, the active development does take a toll; documentation is a bit lacking, plus some new versions of Robolectric break things in previous versions. &amp;nbsp;Plus, it can&#39;t mock everything - for example, inter-app communication - since it&#39;s not on an actual Android OS. &amp;nbsp;That said, the benefits here far outweigh the negatives when it comes to unit testing Android.&lt;br /&gt;&lt;br /&gt;Pros:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Fast&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Can access mocked Android framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Actively developed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;Cons:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Not the true Android framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Not everything is mocked&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;Lacking documentation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://rultech.wordpress.com/&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- Wordpress&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://rultech.blogspot.com/&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- Blogspot&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&amp;nbsp;- Knowledge Base&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #f3f3f3; font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://blogs.proideaclub.in/&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&amp;nbsp;- Blog&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;-webkit-text-stroke-width: 0px; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 24pt; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: #f3f3f3;&quot;&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;&lt;a href=&quot;http://proideaclub.blogspot.in/&quot;&gt;Pro!deaClub&lt;/a&gt;&amp;nbsp;- Blogspot&lt;/span&gt;&lt;span style=&quot;font-size: 13.5pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black; font-size: 13.5pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/5717464279827757290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/02/testing-on-android-unit-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/5717464279827757290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/5717464279827757290'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/02/testing-on-android-unit-tests.html' title='Testing on Android : Unit Tests'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-7549330721436225983</id><published>2014-01-27T12:08:00.001+05:30</published><updated>2014-01-27T12:11:03.668+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Acquisition"/><category scheme="http://www.blogger.com/atom/ns#" term="Business"/><category scheme="http://www.blogger.com/atom/ns#" term="Marketing"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile User"/><title type='text'>Mobile User Acquisition - A Basic Pathway </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Acquiring users in a cost-efficient way is critical for building a&amp;nbsp;successful app business&amp;nbsp;and apart from time, skills and money you need to have a well-thought strategy in place that will enable you to iterate fast and learn from your mistakes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In a previous post, we have constructed the&amp;nbsp;mobile user acquisition funnel&amp;nbsp;and by measuring the conversions at each step we are now ready to experiment with different optimizations and identify the ones that yield the best results.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Many users will be dropping-out at every step of your funnel and although on the surface this behavior appears to be random, you should try to understand its key drivers and take actions to minimize the drop-off.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
To put things in perspective, think about a relatively expensive item you’ve purchased in the last 3 months. Then ask yourself the following questions:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;ol start=&quot;1&quot; style=&quot;margin-top: 0in;&quot; type=&quot;1&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Did you purchase that item because it was fulfilling one of your needs?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Was the shop you bought it from trustful?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Chances are that you responded positively to both questions. The same questions are, unsurprisingly, being asked by every potential user before deciding whether to download your free app or not and you should center your initial optimization efforts around them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Funnel – Top&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Getting more and more people at the top of your mobile user acquisition funnel is definitely a good thing, provided that your funnel is not leaky and you get a significant proportion of regular users at the other end.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A good strategy would be to first&amp;nbsp;&lt;b&gt;soft-launch&lt;/b&gt;&amp;nbsp;so that you make sure you have healthy conversions at each step and then ramp up your efforts with a proper launch, to increase the number of people that will find out your app exists.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Currently,&amp;nbsp;&lt;b&gt;performance-based mobile marketing&lt;/b&gt;&amp;nbsp;(paid or free with cross-promotion) is considered by many the biggest contributor to the growth of a mobile user base and can be complemented with growth hacks, traditional marketing and app store SEO that will eventually provide an incremental value. For paid non-incentivized app installs, a strategy to minimize costs is to buy inventory from a variety of mobile ad networks (since CPI prices can increase substantially when a mobile ad network saturates) and avoid peak hours or special events where inflated CPI prices are observed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Some users will find out about your app through&amp;nbsp;&lt;b&gt;organic&lt;/b&gt;&amp;nbsp;ways such as browsing categories in the app store, through lists of featured apps or by actively searching for it. Localization can be quite powerful and you should consider launching in different countries and app stores. At the same time a significant volume of organic downloads can be generated by achieving a high rank position (to get perspective, for the&amp;nbsp;#1 iTunes App Store rank&amp;nbsp;you need from 400,000 to 1,000,000 daily installs plus positive reviews) or getting featured, however, as the app stores dynamics and rankings change all the time you should plan your launch strategy assuming neither will happen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
If you want to amplify all the above marketing efforts and decrease substantially the acquisition cost, make sure you bake some&amp;nbsp;&lt;b&gt;growth hacks&lt;/b&gt;&amp;nbsp;in your app i.e. an invitation system where your happy users can effortlessly invite some of their friends while getting an extra value in return. The virality factor (also known as the&amp;nbsp;k-factor) is important because if, for example, you manage to get 1 out of 10 users to convince a friend to try your app (k-factor = 0.1), this means that for every 1000 users you acquire through whatever acquisition channel, another 100 users will be acquired at no extra cost.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Finally,&amp;nbsp;&lt;b&gt;referrals&lt;/b&gt;&amp;nbsp;coming from influential bloggers, app review sites or even press releases will lower substantially the trust barrier you have to overcome and depending on the size of their audience, it could have a significant impact on growing your user base.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Funnel – Middle&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
If things go well from your efforts at the top of the funnel, some potential users will have already visited your app store page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Your primary goal now is to convince them that your app is the best to fulfill their particular need and aim to quickly build trust.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
At your disposal is every piece of information that can be tweaked and you should experiment with different variations in order to optimize conversions:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;disc&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Copy&lt;/b&gt;: You need a catchy title that communicates clearly the need your app is addressing. Think hard about the layout of your app description, the actual words and how to nail the “above the fold” text. Ridiculously good-looking screenshots are a strong indicator of credibility and can build trust.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Social Proof&lt;/b&gt;: The volume and quality of your ratings and reviews, have an important role when building trust. Make sure that you swiftly address significant complaints and be prepared to fight the classic “chicken-and-egg” situation at the very beginning.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Price&lt;/b&gt;: Different business models, will affect conversion rates differently throughout the entire acquisition funnel. Know your strengths and the weaknesses of the competition, and position your app business accordingly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Meta&lt;/b&gt;: The actual size of your app, the frequency of updates, its maturity content and the number of permissions it requires, will affect the conversions albeit at a lessened extend.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Funnel – Bottom&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
The download has finished in a timely manner and if he didn’t forget to open the app, you got yourself a new user.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Designing a flawless&amp;nbsp;&lt;b&gt;new user experience (NUX)&lt;/b&gt;&amp;nbsp;is critical in the “all-or-nothing” battle that takes place the first time a new user opens your app.&amp;nbsp;Deep-linking&amp;nbsp;to a custom landing page within the app, easy on-boarding and giving them a reason to come back again should accompany your product design skills that are now being tested.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
He decides to close the app and if he opens it again a few times more, give yourself a pat on the back – you got a regular user!&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Optimization&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
It’s important to develop a process of constant experimentation, as some optimizations might work better than others over time and as your user base grows.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A useful tool for optimization is the concept of&amp;nbsp;user lifetime value&amp;nbsp;(LTV), where you estimate the maximum revenue you will ever get from an average user, and this is then used as the maximum threshold on how much you are willing to spend for acquiring a user.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
Once your funnel conversions are healthy, you should aim to identify a handful traffic sources that bring high-LTV users at a low acquisition cost, and double-down your resources on them.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Acquiring users in a cost-efficient way is critical for building a&amp;nbsp;successful app business&amp;nbsp;and apart from time, skills and money you need to have a well-thought strategy in place that will enable you to iterate fast and learn from your mistakes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In a previous post, we have constructed the&amp;nbsp;mobile user acquisition funnel&amp;nbsp;and by measuring the conversions at each step we are now ready to experiment with different optimizations and identify the ones that yield the best results.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Many users will be dropping-out at every step of your funnel and although on the surface this behavior appears to be random, you should try to understand its key drivers and take actions to minimize the drop-off.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
To put things in perspective, think about a relatively expensive item you’ve purchased in the last 3 months. Then ask yourself the following questions:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;ol start=&quot;1&quot; style=&quot;margin-top: 0in;&quot; type=&quot;1&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Did you purchase that item because it was fulfilling one of your needs?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Was the shop you bought it from trustful?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Chances are that you responded positively to both questions. The same questions are, unsurprisingly, being asked by every potential user before deciding whether to download your free app or not and you should center your initial optimization efforts around them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Funnel – Top&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Getting more and more people at the top of your mobile user acquisition funnel is definitely a good thing, provided that your funnel is not leaky and you get a significant proportion of regular users at the other end.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A good strategy would be to first&amp;nbsp;&lt;b&gt;soft-launch&lt;/b&gt;&amp;nbsp;so that you make sure you have healthy conversions at each step and then ramp up your efforts with a proper launch, to increase the number of people that will find out your app exists.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Currently,&amp;nbsp;&lt;b&gt;performance-based mobile marketing&lt;/b&gt;&amp;nbsp;(paid or free with cross-promotion) is considered by many the biggest contributor to the growth of a mobile user base and can be complemented with growth hacks, traditional marketing and app store SEO that will eventually provide an incremental value. For paid non-incentivized app installs, a strategy to minimize costs is to buy inventory from a variety of mobile ad networks (since CPI prices can increase substantially when a mobile ad network saturates) and avoid peak hours or special events where inflated CPI prices are observed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Some users will find out about your app through&amp;nbsp;&lt;b&gt;organic&lt;/b&gt;&amp;nbsp;ways such as browsing categories in the app store, through lists of featured apps or by actively searching for it. Localization can be quite powerful and you should consider launching in different countries and app stores. At the same time a significant volume of organic downloads can be generated by achieving a high rank position (to get perspective, for the&amp;nbsp;#1 iTunes App Store rank&amp;nbsp;you need from 400,000 to 1,000,000 daily installs plus positive reviews) or getting featured, however, as the app stores dynamics and rankings change all the time you should plan your launch strategy assuming neither will happen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
If you want to amplify all the above marketing efforts and decrease substantially the acquisition cost, make sure you bake some&amp;nbsp;&lt;b&gt;growth hacks&lt;/b&gt;&amp;nbsp;in your app i.e. an invitation system where your happy users can effortlessly invite some of their friends while getting an extra value in return. The virality factor (also known as the&amp;nbsp;k-factor) is important because if, for example, you manage to get 1 out of 10 users to convince a friend to try your app (k-factor = 0.1), this means that for every 1000 users you acquire through whatever acquisition channel, another 100 users will be acquired at no extra cost.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Finally,&amp;nbsp;&lt;b&gt;referrals&lt;/b&gt;&amp;nbsp;coming from influential bloggers, app review sites or even press releases will lower substantially the trust barrier you have to overcome and depending on the size of their audience, it could have a significant impact on growing your user base.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Funnel – Middle&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
If things go well from your efforts at the top of the funnel, some potential users will have already visited your app store page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Your primary goal now is to convince them that your app is the best to fulfill their particular need and aim to quickly build trust.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
At your disposal is every piece of information that can be tweaked and you should experiment with different variations in order to optimize conversions:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;disc&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Copy&lt;/b&gt;: You need a catchy title that communicates clearly the need your app is addressing. Think hard about the layout of your app description, the actual words and how to nail the “above the fold” text. Ridiculously good-looking screenshots are a strong indicator of credibility and can build trust.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Social Proof&lt;/b&gt;: The volume and quality of your ratings and reviews, have an important role when building trust. Make sure that you swiftly address significant complaints and be prepared to fight the classic “chicken-and-egg” situation at the very beginning.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Price&lt;/b&gt;: Different business models, will affect conversion rates differently throughout the entire acquisition funnel. Know your strengths and the weaknesses of the competition, and position your app business accordingly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Meta&lt;/b&gt;: The actual size of your app, the frequency of updates, its maturity content and the number of permissions it requires, will affect the conversions albeit at a lessened extend.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Funnel – Bottom&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
The download has finished in a timely manner and if he didn’t forget to open the app, you got yourself a new user.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Designing a flawless&amp;nbsp;&lt;b&gt;new user experience (NUX)&lt;/b&gt;&amp;nbsp;is critical in the “all-or-nothing” battle that takes place the first time a new user opens your app.&amp;nbsp;Deep-linking&amp;nbsp;to a custom landing page within the app, easy on-boarding and giving them a reason to come back again should accompany your product design skills that are now being tested.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
He decides to close the app and if he opens it again a few times more, give yourself a pat on the back – you got a regular user!&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Optimization&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
It’s important to develop a process of constant experimentation, as some optimizations might work better than others over time and as your user base grows.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
A useful tool for optimization is the concept of&amp;nbsp;user lifetime value&amp;nbsp;(LTV), where you estimate the maximum revenue you will ever get from an average user, and this is then used as the maximum threshold on how much you are willing to spend for acquiring a user.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Once your funnel conversions are healthy, you should aim to identify a handful traffic sources that bring high-LTV users at a low acquisition cost, and double-down your resources on them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- wordpress&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://rultech.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- blogspot&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot; target=&quot;_blank&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;a href=&quot;http://proideaclub.blogspot.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub&lt;/a&gt;&amp;nbsp;- blogspot&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/7549330721436225983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/01/mobile-user-acquisition-basic-pathway.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/7549330721436225983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/7549330721436225983'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/01/mobile-user-acquisition-basic-pathway.html' title='Mobile User Acquisition - A Basic Pathway '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-605634404972330070</id><published>2014-01-19T22:12:00.001+05:30</published><updated>2014-01-19T22:12:42.396+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="UI Design"/><title type='text'>Way to create good User Interface Design</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Clarity is job #1&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Clarity is the first and most important job of any interface. To be effective using an interface you&#39;ve designed, people must be able to recognize what it is, care about why they would use it, understand what the interface is helping them interact with, predict what will happen when they use it, and then successfully interact with it. While there is room for mystery and delayed gratification in interfaces, there is no room for confusion. Clarity inspires confidence and leads to further use. One hundred clear screens is preferable to a single cluttered one.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Interfaces exist to enable interaction&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Interfaces exist to enable interaction between humans and our world. They can help clarify, illuminate, enable, show relationships, bring us together, pull us apart, manage our expectations, and give us access to services. The act of designing interfaces is not Art. Interfaces are not monuments unto themselves. Interfaces do a job and their effectiveness can be measured. They are not just utilitarian, however. The best interfaces can inspire, evoke, mystify, and intensify our relationship with the world.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Conserve attention at all costs&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;We live in a world of interruption. It&#39;s hard to read in peace anymore without something trying to distract us and direct our attention elsewhere. Attention is precious. Don&#39;t litter the side of your applications with distractible material…remember why the screen exists in the first place. If someone is reading let them finish reading before showing that advertisement (if you&amp;nbsp;must). Honor attention and not only will your readers be happier, your results will be better. When use is the primary goal, attention becomes the prerequisite. Conserve it at all costs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Keep users in control&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Humans are most comfortable when they feel in control of themselves and their environment. Thoughtless software takes away that comfort by forcing people into unplanned interactions, confusing pathways, and surprising outcomes. Keep users in control by regularly surfacing system status, by describing causation (if you do this that will happen) and by giving insight into what to expect at every turn. Don&#39;t worry about stating the obvious…the obvious almost never is.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Direct manipulation is best&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;The best interface is none at all, when we are able to directly manipulate the physical objects in our world. Since this is not always possible, and objects are increasingly informational, we create interfaces to help us interact with them. It is easy to add more layers than necessary to an interface, creating overly-wrought buttons, chrome, graphics, options, preferences, windows, attachments, and other cruft so that we end up manipulating UI elements instead of what&#39;s important. Instead, strive for that original goal of direct manipulation…design an interface with as little a footprint as possible, recognizing as much as possible natural human gestures. Ideally, the interface is so slight that the user has a feeling of direct manipulation with the object of their focus.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;One primary action per screen&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Every screen we design should support a single action of real value to the person using it. This makes it easier to learn, easier to use, and easier to add to or build on when necessary. Screens that support two or more primary actions become confusing quickly. Like a written article should have a single, strong thesis, every screen we design should support a single, strong action that is its raison d&#39;etre.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Keep secondary actions secondary&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Screens with a single primary action can have multiple secondary actions but they need to be kept secondary! The reason why your article exists isn&#39;t so that people can share it on Twitter…it exists for people to read and understand it. Keep secondary actions secondary by making them lighter weight visually or shown after the primary action has been achieved.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Provide a natural next step&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Very few interactions are meant to be the last, so thoughtfully design a next step for each interaction a person has with your interface. Anticipate what the next interaction should be and design to support it. Just as we like in human conversation, provide an opening for further interaction. Don&#39;t leave a person hanging because they&#39;ve done what you want them to do…give them a natural next step that helps them further achieve their goals.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Appearance follows behavior&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Humans are most comfortable with things that behave the way we expect. Other people, animals, objects, software. When someone or something behaves consistently with our expectations we feel like we have a good relationship with it. To that end&amp;nbsp;designed elements should look like how they behave.&amp;nbsp;Form follows function. In practice this means that someone should be able to predict how an interface element will behave merely by looking at it. If it&amp;nbsp;looks&amp;nbsp;like a button it shouldact&amp;nbsp;like a button. Don&#39;t get cute with the basics of interaction…keep your creativity for higher order concerns.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Consistency matters&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Following on the previous principle, screen elements should not appear consistent with each other unless they behave consistently with each other. Elements that behave the same should look the same. But it is just as important for unlike elements to appear unlike (be inconsistent) as it is for like elements to appear consistent. In an effort to be consistent novice designers often obscure important differences by using the same visual treatment (often to re-use code) when different visual treatment is appropriate.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Strong visual hierarchies work best&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;A strong visual hierarchy is achieved when there is a clear viewing order to the visual elements on a screen. That is, when users view the same items in the same order every time. Weak visual hierarchies give little clue about where to rest one&#39;s gaze and end up feeling cluttered and confusing. In environments of great change it is hard to maintain a strong visual hierarchy because visual weight is relative: when everything is bold, nothing is bold. Should a single visually heavy element be added to a screen, the designer may need to reset the visual weight of all elements to once again achieve a strong hierarchy. Most people don&#39;t notice visual hierarchy but it is one of the easiest ways to strengthen (or weaken) a design.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Smart organization reduces cognitive load&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;As John Maeda says in his book&amp;nbsp;Simplicity, smart organization of screen elements can&amp;nbsp;make the many appear as the few. This helps people understand your interface easier and more quickly, as you&#39;ve illustrated the inherent relationships of content in your design. Group together like elements, show natural relationships by placement and orientation. By smartly organizing your content you make it less of a cognitive load on the user…who doesn&#39;t have to think about how elements are related because you&#39;ve done it for them. Don&#39;t force the user to figure things out…show them by designing those relationships into your screens.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Highlight, don&#39;t determine, with color&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;The color of physical things changes as light changes. In the full light of day we see a very different tree than one outlined against a sunset. As in the physical world, where color is a many-shaded thing, color should not determine much in an interface. It can help, be used for highlighting, be used to guide attention, but should not be the only differentiator of things. For long-reading or extended screen hours, use light or muted background colors, saving brighter hues for your accent colors. Of course there is a time for vibrant background colors as well, just be sure that it is appropriate for your audience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Progressive disclosure&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Show only what is necessary on each screen. If people are making a choice, show enough information to allow them the choice, then dive into details on a subsequent screen. Avoid the tendency to over-explain or show everything all at once. When possible, defer decisions to subsequent screens by progressively disclosing information as necessary. This will keep your interactions more clear.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Help people inline&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;In ideal interfaces, help is not necessary because the interface is learnable and usable. The step below this,&amp;nbsp;reality, is one in which help is inline and contextual, available only when and where it is needed, hidden from view at all other times. Asking people to go to help and find an answer to their question puts the onus on them to know what they need. Instead build in help where it is needed…just make sure that it is out of the way of people who already know how to use your interface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;A crucial moment: the zero state&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;The first time experience with an interface is crucial, yet often overlooked by designers. In order to best help our users get up to speed with our designs, it is best to design for the zero state, the state in which nothing has yet occurred. This state shouldn&#39;t be a blank canvas…it should provide direction and guidance for getting up to speed. Much of the friction of interaction is in that initial context…once people understand the rules they have a much higher likelihood of success.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Great design is invisible&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;A curious property of great design is that it usually goes unnoticed by the people who use it. One reason for this is that if the design is successful the user can focus on their own goals and not the interface…when they complete their goal they are satisfied and do not need to reflect on the situation. As a designer this can be tough…as we receive less adulation when our designs are good. But great designers are content with a well-used design…and know that happy users are often silent.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Build on other design disciplines&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;Visual and graphic design, typography, copywriting, information architecture and visualization…all of these disciplines are part of interface design. They can be touched upon or specialized in. Do not get into turf wars or look down on other disciplines: grab from them the aspects that help you do your work and push on. Pull in insights from seemingly unrelated disciplines as well…what can we learn from publishing, writing code, bookbinding, skateboarding, firefighting, karate?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;&amp;nbsp;&amp;nbsp;Interfaces exist to be used&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times;&quot;&gt;As in most design disciplines, interface design is successful when people are using what you&#39;ve designed. Like a beautiful chair that is uncomfortable to sit in, design has failed when people choose not to use it. Therefore, interface design can be as much about creating an environment for use as it is creating an artifact worth using. It is not enough for an interface to satisfy the ego of its designer: it must be used!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 4.5pt;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- wordpress&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://rultech.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- blogspot&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot; target=&quot;_blank&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://proideaclub.blogspot.in/&quot; style=&quot;line-height: 24pt;&quot; target=&quot;_blank&quot;&gt;Pro!deaClub&lt;/a&gt;&lt;span style=&quot;line-height: 24pt;&quot;&gt;&amp;nbsp;- blogspot&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; line-height: 24pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/605634404972330070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/01/way-to-create-good-user-interface-design.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/605634404972330070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/605634404972330070'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/01/way-to-create-good-user-interface-design.html' title='Way to create good User Interface Design'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-8019628621645806062</id><published>2014-01-19T21:50:00.000+05:30</published><updated>2014-01-19T21:50:20.996+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS 7"/><category scheme="http://www.blogger.com/atom/ns#" term="UITextView"/><title type='text'>Fixing UITextView on iOS 7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;UITextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;on
iOS 7 is&amp;nbsp;&lt;a href=&quot;https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextView_Class/Reference/UITextView.html#//apple_ref/occ/instp/UITextView/linkTextAttributes&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;a lot more
powerful&lt;/span&gt;&lt;/a&gt;&amp;nbsp;as Apple switched over from using&amp;nbsp;&lt;a href=&quot;http://www.cocoanetics.com/2012/12/uitextview-caught-with-trousers-down/&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;WebKit&lt;/span&gt;&lt;/a&gt;&amp;nbsp;to&amp;nbsp;&lt;a href=&quot;https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;TextKit&lt;/span&gt;&lt;/a&gt;&amp;nbsp;for
rendering. It’s also very much a 1.0, and has some&amp;nbsp;&lt;a href=&quot;http://inessential.com/2014/01/07/uitextview_scroll-to-typing_bug&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;quite terrible&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;https://devforums.apple.com/message/918284#918284&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;bugs&lt;/span&gt;&lt;/a&gt;.
It goes so far that people started writing&amp;nbsp;&lt;a href=&quot;https://github.com/jaredsinclair/JTSTextView&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;replacements for the whole scrolling
logic&lt;/span&gt;&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;Of course people reported
these issues in&amp;nbsp;&lt;a href=&quot;http://pspdfkit.com/&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;PSPDFKit&lt;/span&gt;&lt;/a&gt;&amp;nbsp;as well, so
I had to find a workaround. I’m using&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;contentInset&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;when
the keyboard (iPhone) or another view (iPhone/iPad) goes up, which is pretty
much completely ignored by&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;UITextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;in
iOS 7. This is most frustrating since it works perfectly in iOS 6.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;At first my solution was
based on a category, but after discovering more and more needed hooks, I moved
over to a subclass that&amp;nbsp;&lt;a href=&quot;https://github.com/steipete/PSPDFTextView/blob/ee9ce04ad04217efe0bc84d67f3895a34252d37c/PSPDFTextView/PSPDFTextView.m#L148-164&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;automatically
forwards all delegate methods&lt;/span&gt;&lt;/a&gt;. This has the advantage of more shared
code, and we might be able to remove all those horrible hacks once iOS 8 comes
out. I certainly hope so and will write a few more radars.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;So, what’s fixed in&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;PSPDFTextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt; margin-left: 15.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;&quot;&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;color: #555555; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;·&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;When
adding a newline,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;UITextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;will now properly scroll down.
Previously, you needed to add at least one character for this to happen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt; margin-left: 15.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;&quot;&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;color: #555555; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;·&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;Scrolling
to the caret position now considers&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;contentInset&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;UITextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;completely ignored this.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt; margin-left: 15.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;&quot;&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;color: #555555; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;·&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;Typing
will also consider&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;contentInset&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;and will update the scroll position
accordingly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt; margin-left: 15.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;&quot;&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;color: #555555; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;·&lt;span style=&quot;font: 7.0pt &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;Pasted
text will scroll to the caret position.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;To enable these fixes,
simply use&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;PSPDFTextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;instead
of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;UITextView&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;a href=&quot;https://github.com/steipete/PSPDFTextView&quot;&gt;&lt;span style=&quot;color: #258fb8; text-decoration: none; text-underline: none;&quot;&gt;https://github.com/steipete/PSPDFTextView&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;This is working quite
well for my use case, but there surely are edge cases where this won’t be
enough (like when using rich text). I also tried using the new&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: solid #CCCCCC 1.0pt; color: #555555; font-family: Monaco; font-size: 9.5pt; mso-bidi-font-family: Courier; mso-border-alt: solid #CCCCCC .75pt; padding: 1.0pt;&quot;&gt;textContainerInset&lt;/span&gt;&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&amp;nbsp;but this didn’t
work as intended and didn’t solve my scrolling problems.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;I have to give credit to
countless people that searched for the same solution - this very much was a
community oriented fix. Sadly, this doesn’t seem to be a priority for Apple,
since it’s still broken in iOS 7.1b3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;Please fork the repo and
send a pull request, if you have any ideas how to simplify the code or find an
even better workaround.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;a href=&quot;http://rultech.wordpress.com/&quot;&gt;&lt;span style=&quot;color: #555555; text-decoration: none; text-underline: none;&quot;&gt;Rultech Blog&lt;/span&gt;&lt;/a&gt;&amp;nbsp;- wordpress&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;a href=&quot;http://rultech.blogspot.com/&quot;&gt;&lt;span style=&quot;color: #555555; text-decoration: none; text-underline: none;&quot;&gt;Rultech Blog&lt;/span&gt;&lt;/a&gt;&amp;nbsp;- blogspot&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot;&gt;&lt;span style=&quot;color: #555555; text-decoration: none; text-underline: none;&quot;&gt;Rultech Knowledge Base&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;a href=&quot;http://blogs.proideaclub.in/&quot;&gt;&lt;span style=&quot;color: #555555; text-decoration: none; text-underline: none;&quot;&gt;Pro!deaClub Blog&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Times; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;a href=&quot;http://proideaclub.blogspot.in/&quot;&gt;&lt;span style=&quot;color: #555555; text-decoration: none; text-underline: none;&quot;&gt;Pro!deaClub&lt;/span&gt;&lt;/a&gt;&amp;nbsp;- blogspot&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:DocumentProperties&gt;
  &lt;o:Revision&gt;0&lt;/o:Revision&gt;
  &lt;o:TotalTime&gt;0&lt;/o:TotalTime&gt;
  &lt;o:Pages&gt;1&lt;/o:Pages&gt;
  &lt;o:Words&gt;490&lt;/o:Words&gt;
  &lt;o:Characters&gt;2795&lt;/o:Characters&gt;
  &lt;o:Company&gt;Rultech Solutions Private Limited&lt;/o:Company&gt;
  &lt;o:Lines&gt;23&lt;/o:Lines&gt;
  &lt;o:Paragraphs&gt;6&lt;/o:Paragraphs&gt;
  &lt;o:CharactersWithSpaces&gt;3279&lt;/o:CharactersWithSpaces&gt;
  &lt;o:Version&gt;14.0&lt;/o:Version&gt;
 &lt;/o:DocumentProperties&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;JA&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt;
   &lt;m:brkBin m:val=&quot;before&quot;/&gt;
   &lt;m:brkBinSub m:val=&quot;&amp;#45;-&quot;/&gt;
   &lt;m:smallFrac m:val=&quot;off&quot;/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val=&quot;0&quot;/&gt;
   &lt;m:rMargin m:val=&quot;0&quot;/&gt;
   &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt;
   &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt;
   &lt;m:intLim m:val=&quot;subSup&quot;/&gt;
   &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;true&quot;
  DefSemiHidden=&quot;true&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot;
  LatentStyleCount=&quot;276&quot;&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; Name=&quot;Default Paragraph Font&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;59&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Table Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Placeholder Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Revision&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;List Paragraph&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;19&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;21&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;31&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;32&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;33&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Book Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;37&quot; Name=&quot;Bibliography&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; QFormat=&quot;true&quot; Name=&quot;TOC Heading&quot;/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:&quot;Table Normal&quot;;
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:&quot;&quot;;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Cambria;
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;



&lt;!--StartFragment--&gt;











































&lt;!--EndFragment--&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 24.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/8019628621645806062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/01/fixing-uitextview-on-ios-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/8019628621645806062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/8019628621645806062'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/01/fixing-uitextview-on-ios-7.html' title='Fixing UITextView on iOS 7'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-5005526506060725769</id><published>2014-01-05T10:39:00.002+05:30</published><updated>2014-01-05T10:39:47.999+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="keyboard"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech"/><title type='text'>Keyboard on iOS - Rultech Weekly</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;The keyboard is present in nearly every application out there. Using the keyboard is the easiest way to provide users with a way to input alphanumeric data into applications. Trivial as it might look like in the beginning, a correct implementation of keyboard behavior can be a costly endeavor. Multiple keyboard states make it hard to implement logic that will behave correctly for all of them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;This post will cover my observations and experiences with the keyboard system in iOS. I will try to describe some basic concepts behind the keyboard notification system and take a closer look at the order in which notifications are sent.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Keyboard System&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;There are two main patterns across the Objective-C/Cocoa framework that give the user an idea of how the communication process between different objects functions – the delegation pattern and the notifications pattern.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;The public keyboard API is built around the latter. You just inform the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;object that you want to receive some specific notifications. These notifications are later sent to you from somewhere else within the application when a specific type of event occurs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Given that notifications are a generic pattern, there has to be a way to utilize them so they provide as much information as we want them to. Moreover, this information can be represented by a different number of objects which can, in turn, represent various types. For this particular purpose there is a&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;property in the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;class. This dictionary provides the elements listening for notifications with an additional context behind the triggering of the notification.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;For keyboard notifications, we use the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;[NSNotificationCenter defaultCenter]&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;method to get an instance of&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;class, which will be used for the notification’s registration process.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;[[NSNotificationCenter defaultCenter] addObserver:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;selector:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;(keyboardWillShow:) name:UIKeyboardWillShowNotification object:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;And that’s all you need to start receiving notifications about the appearance of the keyboard. Well, what next?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Keyboard’s Notification&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;To put things bluntly, the iOS keyboard can be very annoying. Despite being really simple from the user’s perspective, in multiple cases the logic of the application suffers from either the lack or the misinterpretation of the system’s notifications. Below is a list of the keyboard’s notifications present in iOS:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– notification sent when the keyboard is about to show.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– notification sent when the keyboard has just appeared.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– notification sent when the keyboard is about to hide.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– notification sent when the keyboard has just been hidden.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;- notification sent when the kebyoard’s frame is about to change.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– notification sent when the keyboard’s frame has just changed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;If we take a look at the names of keyboard’s notifications it is pretty easy to think that the typical (maybe the only correct) ‘path’ for these notifications looks like this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;In fact, these two are the most common, but when defining your application logic you can’t always expect to get all these notifications in the presented order. It is entirely normal not to get some of them in specific circumstances or to get them in a different order. Since we want our applications to provide the best user experience possible, we should know about every possible order that they may have to deal with.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;UserInfo Dictionary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;The UserInfo property of the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;class is the only (public) way to get the keyboard frame and some specific information about the keyboard’s animation. Every notification gives the developer a snapshot of the keyboard’s present or future state and allows us to update the state of the application. These are the properties of a userInfo dictionary which are passed with every keyboard notification:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameBeginUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– frame of the keyboard at the beginning of the current keyboard state change.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– frame of the keyboard at the end of the current keyboard state change.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardAnimationDurationUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– duration of the animation used to animate the change of the keyboard state.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: Symbol; font-size: 10pt;&quot;&gt;·&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardAnimationCurveUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;– animation curve used to animate the change of the keyboard’s state.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameBeginUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;are two most important and probably most commonly used elements of the userInfo dictionary. That being said, there is one important thing to remember. Coordinates ‘hidden’ behind these keys don’t take rotation factors applied to the window into account, so their values can seem be wrong. It is really important to remember to use&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;convertRect:fromWindow&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;or&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;convertRect:fromView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;to make sure we work on proper keyboard coordinates.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;The two following properties are most commonly used when we want to respond to a keyboard animation with our own animation. If we have the values for both the length of the animation’s duration and the curve used for the keyboard’s animation, we can use them to create our own animation, which will sync nicely with the keyboard’s own animation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Responding to Notifications&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Let’s imagine we have a view which is an&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UITableView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;object and its frame is equal to the screen bounds. In that particular case, the appearance of the keyboard will cause the bottom part of the&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UITableView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;content to be obscured by the keyboard frame. Moreover, the user won’t be able to scroll down to the bottom part of the content view which is put in table view. This is not the kind of experience we want to provide to our users.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;We can handle this case in few different ways. The majority (if not all) of them require using keyboard notifications. We just listen for the appropriate notification and change some properties of our view hierarchy, so that user gets to see the entire content of the table view.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Earlier in this post, we added ourselves as the listeners for&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;using the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;addObserver:selector:name:object&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;method of the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;class. Now, we can expand that code and add a method which will be called after the notification is received:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;-(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardWillShow:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;keyboardEndFrame = [notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRectValue&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIViewAnimationCurve&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;curve = [notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIKeyboardAnimationCurveUserInfoKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;unsignedIntegerValue&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIViewAnimationOptions&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;options = (curve &amp;lt;&amp;lt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;) |&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIViewAnimationOptionBeginFromCurrentState&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSTimeInterval&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;duration = [notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIKeyboardAnimationDurationUserInfoKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;doubleValue&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;frame = CGRectInset(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.tableView.frame,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;, CGRectGetHeight(keyboardEndFrame));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIView&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;animateWithDuration&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:duration&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;delay&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #1c00cf; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:options&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;animations&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:^{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.tableView.frame = frame;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;completion&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;This code changes the frame of the table view so that it occupies only that part of the screen which is not hidden behind the keyboard frame. Furthermore, it changes the frame using an animation that perfectly matches the keyboard animation. The animation&#39;s duration and its curve are identical to the one used to show the keyboard, so the user shouldn&#39;t even notice any changes to the table view frame. Just don&#39;t forget to return the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;tableView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;frame to its initial state after the keyboard gets hidden!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Short Summary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;After reading our introduction to the notification system, you should know how to listen for or respond to keyboard notifications, you’re well-versed in the keyboard&#39;s&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;dictionary, and spelling the names of all of the keyboard notifications is not a problem anymore.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Well, you may think that you now know everything to properly work with a keyboard. In theory that might be true, but in practice your application can sometimes exhibit some unexpected behaviors. You still don&#39;t know the order in which notifications are sent and which of them can be absent in specific circumstances. Try to think for a moment about what will happen when there’s an external keyboard connected to the iPad? Not that obvious, isn’t it?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;In the following parts of this post, I’d like to explore the notifications that occur when we change the state of the keyboard, e.g. docking the keyboard, showing the keyboard when there’s an external one connected to the device, etc. Additionally, I’ll try to take a close look at the values included in the&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;dictionary. Finally, I’ll provide some code that will try to encapsulate some system notifications and broadcast my own. The latter notifications will have names equivalent to the system ones but will be sent in different circumstances.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Keyboard Magic&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;In iOS 5, Apple added a new feature to the system keyboard. Clicking and holding the keyboard button at the bottom right corner of the keyboard brings up a popup which allows you to merge/unmerge and dock/undock you keyboard. You can even move the undocked keyboard by holding and panning the abovementioned keyboard button along the screen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Dragging keyboard triggers&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;notifications. First of them is send when user starts dragging and the second one after dragging is finished. Because of the fact system doesn&#39;t know what will be value of the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;key at the beginning of the dragging, value set for this key is equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectZero&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&#39;s dictionary. Moreover, value of the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameBeginUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;key is equal to&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectZero&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;You don&#39;t get&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;notifications when a non-standard keyboard is being shown. Hiding the keyboard doesn&#39;t trigger&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeybardWillHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;notifications. Still,&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;notifications work as expected and can be used to imitate other ones (to detect when a non-standard keyboard is being shown or hidden).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;How to imitate UIKeyboardWillShowNotification and UIKeyboardDidShowNotification when showing unmerged/undocked keyboard?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;1.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Check whether&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;was not preceded by&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;2.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Check whether the rectangle from&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&#39;s&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is within screen bounds.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;If both of these conditions are met, the keyboard will be shown in the unmerged/undocked state. Imitating&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;notifications obviously works in almost the same way, albeit with slightly different logic. You just need to switch “within” from condition no. 2 to “not within” and you’re set. Here is the code:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardWillShow:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardWillHide:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidHide:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidShow:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;; }&amp;nbsp;&amp;nbsp;&amp;nbsp;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardWillChangeFrame:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;endFrame = [notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRectValue&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIWindow&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*window = [[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIApplication&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;sharedApplication&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;windows&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;firstObject&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endFrame = [window&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;convertRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:endFrame&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;fromWindow&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;(CGRectContainsRect(window.frame, endFrame) &amp;amp;&amp;amp; !&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[NSNotificationCenter defaultCenter] postNotificationName:MCSKeyboardWillShowNotification object:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;userInfo:notification.userInfo];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(!&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[NSNotificationCenter defaultCenter] postNotificationName:MCSKeyboardWillHideNotification object:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;userInfo:notification.userInfo];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;defaultCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;postNotificationName&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;MCSKeyboardWillChangeFrameNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidChangeFrame:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;endFrame = [notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRectValue&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIWindow&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*window = [[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIApplication&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;sharedApplication&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;windows&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;firstObject&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endFrame = [window&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;convertRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:endFrame&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;fromWindow&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(CGRectContainsRect(window.frame, endFrame) &amp;amp;&amp;amp; !&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[NSNotificationCenter defaultCenter] postNotificationName:MCSKeyboardDidShowNotification object:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;userInfo:notification.userInfo];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(!&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.standardKeyboard) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[NSNotificationCenter defaultCenter] postNotificationName:MCSKeyboardDidHideNotification object:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;userInfo:notification.userInfo];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[NSNotificationCenter defaultCenter] postNotificationName:MCSKeyboardDidChangeFrameNotification object:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;userInfo:notification.userInfo];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Toggling Dock and Merge State&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Toggling the keyboard&#39;s dock and merge states causes the notifications to be sent in slightly different order than when the keyboard’s appearing or hiding:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;If we dig deeper into userInfo properties of keyboard notifications, we’ll come upon even more weirdness than we expected. When unmerging or undocking the keyboard, the value for&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;in the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;dictionary is different in&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;than in all the other notifications. The value of this key taken from&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;suggests that the keyboard will be placed either in the screen or beyond it when other notifications suggest just the opposite. Also,&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is delivered with the&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameBeginUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;key of the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;dictionary equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectZero&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Furthermore, docking or merging results in the sending of the&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;notification with the value for the&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameBeginUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;key equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectZero&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Splitting/Merging When Keyboard Is Undocked&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Assuming the keyboard is in an undocked state, merging and splitting the keyboard makes the notification system send notifications in the following order:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;That&#39;s right -&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is sent twice although there are no differences in keyboard frames passed in the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;dictionary. Also, do be careful with these frames - they sometimes represent pretty useless values.&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectZero&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;and&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameBeginUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectZero&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;in&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;. Why two&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;notifications? The only possible reason I found for that is captured on the screenshot underneath.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;It seems that during the merging/splitting animation, there is change in the keyboard view/frame, and that’s probably the reason behind having two&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;notifications. Just don&#39;t forget these notifications don’t always occur on a one-to-one basis!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Multiple Interface Orientations - Device Rotation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Device rotation is pretty weird when we look at it from the keyboard notification perspective. It can be really frustrating and hard to notice. Let&#39;s say your application supports multiple interface orientations and users start to rotate the device when they keyboard is displayed on the screen. What happens then? If we take a closer look at the keyboard animation which appears when we rotate the screen, we’ll quickly see that there’s nothing special to it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;But even a cursory glance at the notification logs shows us that something weird is happening. It looks like the rotation of the device makes the keyboard disappear and appear again. It’s almost imperceptible from the user’s perspective, but this notification behavior can have serious implications for the logic of the application. It looks like the easiest way to detect these notifications is to implement two templates methods of the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIViewController&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Assuming that they were implemented, this is the true order for notifications/method calls for device rotation:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;1.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;willRotateToInterfaceOrientation:duration:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;- template method&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;2.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;3.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;4.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardWillShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;5.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;didRotateToInterfaceOrinetation:duration:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;- template method&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-left: 0in; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;6.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;A simple flag set in&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;willRotateToInterfaceOrientation:duration:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;(and unset in&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;didRotateToInterfaceOrientation:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;) lets us ignore three out of the four notifications which appear during device rotation. The only one left is pretty easy to detect - if the keyboard is displayed and you get&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;, don&#39;t do anything.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;-(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)willRotateToInterfaceOrientation:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIInterfaceOrientation&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)interfaceOrientation&amp;nbsp;&amp;nbsp;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.interfaceRotation =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)didRotateFromInterfaceOrientation:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIInterfaceOrientation&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)interfaceOrientation {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.interfaceRotation =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardWillShow:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.interfaceRotation) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;defaultCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;postNotificationName&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;MCKeyboardWillShowNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidShow:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.interfaceRotation) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;defaultCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;postNotificationName&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;MCKeyboardDidShowNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardWillHide:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.interfaceRotation) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;defaultCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;postNotificationName&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;MCKeyboardWillHideNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;- (&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidHide:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification&amp;nbsp;&amp;nbsp;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.interfaceRotation) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;defaultCenter&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;postNotificationName&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;MCKeyboardDidHideNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;External Keyboard&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Additional changes take place when we connect an external keyboard to the iPad. In this particular case, the notification behavior depends on the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;inputAccessoryView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;property of the control which was the reason for displaying the keyboard.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Let&#39;s say we have a&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UITextField&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;or&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UITextView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;object and we set its&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;inputViewAccessory&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;property. Assuming this object becomes a first responder, the view assigned to inputAccessoryView will be displayed above the keyboard on the screen. This enables programmers to provide a customized keyboard experience to the end users of the application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;If&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;inputAccessoryView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is not present or its height is equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;0&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;points, no keyboard notifications are sent. My guess is that this is because in this case, no visual changes take place in application. Otherwise, all notifications behave as expected – which means they are being sent as in the majority of cases when the keyboard is displayed or hidden in a normal (not undocked or split) state.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;What about the keyboard frame when&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;inputAccessoryView&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;is coupled with the currently displayed keyboard? Luckily for us, frames passed through keyboard notifications seem to take the displayed input view into account. That means keyboard frames passed in the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;objectInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;dictionary are unions of the keyboard&#39;s frame itself and the frame of the input view. Additionally, when there is an external keyboard hooked up to the device and only the accessory view is displayed, the keyboard&#39;s frame is the union of the two abovementioned frames (although the keyboard itself is not visible).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 22.5pt; margin-bottom: 11.25pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 16.5pt;&quot;&gt;Keyboard Visibility&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Due to the fact that there are so many states in which hiding or displaying the keyboard can take place, retaining a value that would inform us whether the keyboard is currently displayed on screen or not is not that obvious (and by displayed I mean visible to the user).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;The easiest solution assumes the creation of a bool property which is later updated each time the system sends a&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidShowNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;or&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidHideNotification&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;notification. Although really intuitive, this solution doesn&#39;t work properly when the keyboard is either undocked or unmerged.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;-(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidShow:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.keyboardVisible =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;-(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidHide:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.keyboardVisible =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraph&quot; style=&quot;background-color: white; line-height: 21pt; margin: 0in 0in 15pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;A better approach to this problem is to update the bool property after we receive a&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardDidChangeFrameNotofication&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;notification. Just remove&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;from the notification&#39;s&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;userInfo&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;property and check whether it is contained within screen bounds.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;-(&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;)keyboardDidChangeFrame:(&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*)notification{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;endFrame = [[notification.&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;userInfo&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;objectForKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIKeyboardFrameEndUserInfoKey&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;CGRectValue&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIWindow&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;*window = [[[&lt;/span&gt;&lt;span style=&quot;color: #5c2699; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;UIApplication&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;sharedApplication&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;windows&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;firstObject&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endFrame = [window&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;convertRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:endFrame&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2e0d6e; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;fromWindow&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;:window];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #aa0d91; font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;.keyboardVisible = CGRectContainsRect(window.frame, endFrame);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Menlo Regular&#39;; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; line-height: 21pt; margin-bottom: 15pt;&quot;&gt;
&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;Notice that we’re using the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectContainsRect&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;function instead of&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectIntersectsRect&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;. This will ensure that the&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;keyboardVisible&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;property will be equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;YES&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;only when the entire keyboard is visible, and by “entire keyboard” I mean keyboard + input accessory view. If you want this property to be equal to&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;YES&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;even when only the input accessory view is visible (when an external keyboard is connected to the device), use&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f4f4f4; background-position: initial initial; background-repeat: initial initial; border: 1pt solid rgb(234, 234, 234); color: #444d50; font-family: Monaco; font-size: 14.5pt; padding: 2pt;&quot;&gt;CGRectIntersectsRect&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #444d50; font-family: &#39;Lato Regular&#39;; font-size: 13pt;&quot;&gt;&amp;nbsp;instead.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://rultech.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- wordpress&lt;/div&gt;
&lt;a href=&quot;http://rultech.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- blogspot&lt;br /&gt;
&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot; target=&quot;_blank&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://proideaclub.blogspot.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub&lt;/a&gt;&amp;nbsp;- blogspot&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/5005526506060725769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2014/01/keyboard-on-ios-rultech-weekly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/5005526506060725769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/5005526506060725769'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2014/01/keyboard-on-ios-rultech-weekly.html' title='Keyboard on iOS - Rultech Weekly'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-701916534930164984</id><published>2013-12-30T15:03:00.002+05:30</published><updated>2013-12-30T15:03:40.347+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech"/><title type='text'>Rultech Weekly</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;iOS News&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://nshipster.com/launch-options/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;UIApplicationDelegate Launch Options&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Is your AppDelegate.m cluttered with a lot of initialization code? There is a better way to organize all that code with launchOptions parameter. Great article from Mattt on different launchOption keys and code snippets on how to use it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://codeblog.shape.dk/blog/2013/12/16/live-editing-layout-constants-using-classy/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;Live Editing Layout Constants&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
We all have spent numerous hours going back and forth arranging pixels and waiting for the app to build and look for the output on simulator. Ole has worked out a way with the help of Classy, Masonry and ClassyLiveLayout to see live edits in the simulator.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://mobile.tutsplus.com/tutorials/iphone/ios-7-sdk-core-bluetooth-theoretical-overview/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;Core Bluetooth - Theoretical Overview&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Great overview of Core Bluetooth APIs and best practices. iOS 7 made some great additions to the Core Bluetooth API and with iBeacon using Bluetooth LE under the hood, Apple is surely going to make more additions to it in the future versions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://www.meonbinary.com/2013/12/creating-slide-out-menu-with-uidynamics/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;Creating a Slide-out Menu with UIDynamics&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
UI Dynamics is the newly added library to iOS 7 that allow you to add real-world inspired interactions to your UI. Mehfuz Hossein step-by-step shows how to create a simple slide-out menu with UI Dynamics. Definitely check it out if you havent yet used UI Dynamics in your app.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;https://github.com/mneorr/XCPretty/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;Flexible and Fast Xcodebuild Formatter&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Goes without saying, debugging is the most time consuming thing we do as a programmer. XCPretty library helps you format Xcode build log so you can clearly look at the error messages rather than reading between the lines.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Design&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;https://medium.com/design-startups/8e4d7c54b0cd/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;11 Steps to a Perfect Logo&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Logo matters, it gives the first visual identity to your app. Its worth looking into logo creation from every perspective. Take a look at 11 of those perspectives in this great visual post.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;https://medium.com/design-ux/49e7bf3e6b31/&quot; target=&quot;_blank&quot;&gt;Drag &amp;amp;amp; Drop: Think Twice&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Dragging things from one side of the screen to another is painful and even more so when its on a touch screen. Dave makes a good case for using touchable interface rather than drag &amp;amp;amp; drop.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Business and Marketing&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://dennisreimann.de/blog/switch-to-freemium/?utm_source=TapFame&amp;amp;utm_campaign=TapFame+weekly+news&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot;&gt;Switching to Freemium&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Software Developer Dennis Reimann lists his reasons for switching to a freemium model for your apps. Interesting read which discusses the growing Freemium model and the App stores tendency to leave &quot;demo&quot; version of apps behind in search rankings.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://mobile9dotcom.tumblr.com/post/68761465784/design-screenshots-that-sell-your-app&quot; target=&quot;_blank&quot;&gt;Design Screenshots That Sell Your Apps&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
When words can only go so far, its up to you to screenshot the essence of your app for the respective store. Use this guide to make sure the pictures of your app are at their best.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;Android News&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://www.androidzeitgeist.com/2013/12/mirror-api-gdk-developing-google-glass.html&quot; target=&quot;_blank&quot;&gt;Mirror API and GDK - Developing for Google Glass&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Ever given thought to what the programming of tomorrow will look like? An Android developer walks us through a sample of what its like to develop for Google Glass.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://gmariotti.blogspot.in/2013/12/restricted-profiles-settings.html&quot; target=&quot;_blank&quot;&gt;Restricted Profile Settings&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Want to allow users to limit your app access to certain profiles? Gabriele has written a great post on how to accomplish it. Netflix just started doing it, you should too!&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://wiebe-elsinga.com/blog/functional-testing-for-android/&quot; target=&quot;_blank&quot;&gt;Functional Testing For Android&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
If you are like me you probably hate writing tests. But its good to know your options just in case. Wiebe walks through four different functional testing frameworks in this post.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Design&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;http://www.mobiletuxedo.com/touch-gesture-icons/&quot; target=&quot;_blank&quot;&gt;Touch Gesture Icons&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
When words just wont do the trick you can use this collection of icons for relaying hand motions for user navigation. Fast, functional, and free.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;a href=&quot;https://medium.com/design-ux/dfaa4d40f4a3/&quot; target=&quot;_blank&quot;&gt;(un)Following Guidelines&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Cross-Platform development is sometimes considered the way to go but developing the app and designing it can be worlds apart. This post aims to eek developers into consideration regarding the vastly different UIs of the standard iOS and Android App.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;http://rultech.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- wordpress&lt;br /&gt;
&lt;a href=&quot;http://rultech.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Rultech Blog&lt;/a&gt;&amp;nbsp;- blogspot&lt;br /&gt;
&lt;a href=&quot;http://rultech.com/it-knowledge-base&quot; target=&quot;_blank&quot;&gt;Rultech Knowledge Base&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub Blog&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://proideaclub.blogspot.in/&quot; target=&quot;_blank&quot;&gt;Pro!deaClub&lt;/a&gt;&amp;nbsp;- blogspot&lt;br /&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;td1&quot; valign=&quot;middle&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/701916534930164984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2013/12/rultech-weekly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/701916534930164984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/701916534930164984'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2013/12/rultech-weekly.html' title='Rultech Weekly'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-9041593353545587590</id><published>2012-08-17T17:24:00.003+05:30</published><updated>2012-08-17T17:26:46.237+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Wallpaper Changer"/><category scheme="http://www.blogger.com/atom/ns#" term="Change Wallpaper"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="Wallaper Changer"/><category scheme="http://www.blogger.com/atom/ns#" term="wallaper changer facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="wallpaper changer flickr"/><title type='text'>Wallpaper Changer</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/authenticate1.png&quot;&gt;&lt;img alt=&quot;Image&quot; class=&quot; wp-image&quot; height=&quot;279&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/authenticate1.png?w=310&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/onlinenetwork.png&quot;&gt;&lt;img alt=&quot;Image&quot; class=&quot; wp-image&quot; height=&quot;279&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/onlinenetwork.png?w=310&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/preview.png&quot;&gt;&lt;img alt=&quot;Image&quot; class=&quot; wp-image&quot; height=&quot;279&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/preview.png?w=310&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/screen1.png&quot;&gt;&lt;img alt=&quot;Image&quot; class=&quot; wp-image&quot; height=&quot;279&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/screen1.png?w=310&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/screen2.png&quot;&gt;&lt;img alt=&quot;Image&quot; class=&quot; wp-image&quot; height=&quot;279&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/screen2.png?w=310&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;strong&gt;Want to Change Wallpaper ?&lt;/strong&gt;&lt;br /&gt;
The Answer is&amp;nbsp;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.rultech.wpchangerTrial&quot; target=&quot;_blank&quot; title=&quot;Wallpaper Changer&quot;&gt;&lt;strong&gt;Wallpaper Changer&lt;/strong&gt;&lt;/a&gt;!!!!&lt;br /&gt;
Just Shaking, Unlocking Screen, or Scheduling your Phone will do the stuff, how Easy, Fast and Efficient Way is that!!!&lt;br /&gt;
More things that would&amp;nbsp;excite&amp;nbsp;you about&amp;nbsp;&lt;a href=&quot;http://proideaclub.in/index.php/applications/2-androidapp/2602-wpchanger&quot; target=&quot;_blank&quot; title=&quot;Wallpaper Changer&quot;&gt;Wallpaper Changer&lt;/a&gt;&amp;nbsp;is that now you can select photos from&amp;nbsp;&lt;a href=&quot;https://www.facebook.com/RulTechInc&quot; target=&quot;_blank&quot; title=&quot;RulTech Solutions Private Limited&quot;&gt;Facebook&lt;/a&gt;&amp;nbsp;and Flickr too.&lt;br /&gt;
&lt;strong&gt;Wallpaper Changer&lt;/strong&gt;&amp;nbsp;app will just do the same. Install and Select the Folder for wallpaper and forget everything. Whenever you shake your phone it will change the wallpaper for you.&lt;br /&gt;
&lt;strong&gt;Note: Long Click the Folder for Selecting.&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogs.proideaclub.in/2012/08/17/wpchanger/&quot; title=&quot;Wallpaper Changer&quot;&gt;&lt;strong&gt;Wallpaper Changer&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;has many other features like change wallpaper on unlocking the screen.&lt;br /&gt;
Notification like&lt;br /&gt;
1. Vibrate on wallpaper change,&lt;br /&gt;
2. Notification icon in title bar for easy access to the app.&lt;br /&gt;
3. Adjust the shake sensitivity as per your requirement.&lt;br /&gt;
Most Imp.&lt;br /&gt;
4. Change Wallpaper on Unlocking the Screen.&lt;br /&gt;
5. Random Wallpaper Selection&lt;br /&gt;
6. Change Wallpaper on Regular Interval.&lt;br /&gt;
7. Start on Boot.&lt;br /&gt;
&lt;strong&gt;Wallpaper Quality can also be controlled by the user.&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;(HIGHER THE VALUE LOWER THE QUALITY, LOWER VALUE HIGER QUALITY)&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;HIGH QUALITY might take some time to change wallpaper!!!&lt;/strong&gt;&lt;br /&gt;
No need to resize the images, so no space is utilized, the images are just processed for displaying as per the selected Quality.&lt;br /&gt;
&lt;strong&gt;Your Images are not Changed in any conditions.&lt;/strong&gt;&lt;br /&gt;
You can preview the images using the preview button to have a view how your images would look as wallpaper.&lt;br /&gt;
There is no option for Landscape mode for now. So if you are looking for something like that please do not install this app.&lt;br /&gt;
Wallpaper Changer has added more functions like Facebook Albums, Flickr AlbumsChanging wallpaper on regular intervals, Randomly changing wallpaper.&lt;br /&gt;
We are surely going to add more functions like landscape mode, Picasa Albums, and many more, etc.&lt;br /&gt;
But our main focus is on Stability and Performance, We would really not like to integrate any feature which would ,lower the performance or stability.&lt;br /&gt;
Also no need to worry about rebooting your phone and turning the app On, As you can just select the option and the app will start automatically on reboot.&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
Permission:&lt;br /&gt;
VIBRATE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :- Vibrate Notification&lt;br /&gt;
RECEIVE_BOOT_COMPLETED &amp;nbsp;&amp;nbsp;&amp;nbsp; :- needed to start auto rotation after reboot&lt;br /&gt;
WRITE_EXTERNAL_STORAGE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :- Processing images for optimization, Nothing is stored on the phone or SD card.&lt;br /&gt;
INTERNET &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :- Send Crash Reports User Interaction is required, It will not send report by automatically.&lt;br /&gt;
SET_WALLPAPER_HINTS &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :- Resizing the Images as per your phones screen.&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
Giving Bad Reviews would not help us to resolve the issues.&lt;br /&gt;
As we cannot Track that. Also if the application Crashes you can send us the report to resolve it.&lt;br /&gt;
Or Mail us&amp;nbsp;&lt;a href=&quot;mailto:support@rultech.com&quot; target=&quot;_blank&quot; title=&quot;Mail Us&quot;&gt;support@rultech.com&lt;/a&gt;&amp;nbsp;for your request and issues. We will surely get back to you immediately.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/9041593353545587590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/wallpaper-changer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/9041593353545587590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/9041593353545587590'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/wallpaper-changer.html' title='Wallpaper Changer'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-1078243157945927264</id><published>2012-08-17T17:23:00.005+05:30</published><updated>2012-09-10T05:08:23.975+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook notification"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook popup"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook toast"/><category scheme="http://www.blogger.com/atom/ns#" term="notification"/><category scheme="http://www.blogger.com/atom/ns#" term="Popup facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><title type='text'>Popup Facebook</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Hi friends,&lt;br /&gt;
&lt;a href=&quot;http://www.proideaclub.in/&quot; target=&quot;_blank&quot; title=&quot;Proideaclub&quot;&gt;ProIdeaClub&lt;/a&gt; is now coming up with &lt;a href=&quot;http://proideaclub.in/index.php/applications/2-androidapp&quot; target=&quot;_blank&quot; title=&quot;Android Apps&quot;&gt;android application&lt;/a&gt; known as &lt;a href=&quot;http://blogs.proideaclub.in/2011/09/04/popup-facebook/&quot; target=&quot;_blank&quot; title=&quot;popup facebook&quot;&gt;Popup Facebook&lt;/a&gt;,&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 14px; line-height: 25.200000762939453px;&quot;&gt;First Preview for all my friends !!! Please comment on this and let us know your feedback!!!!&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgthzpy-RKr2Lo1EzjswkU0Dl1N2yzPQpoZTy6cDBT-D2WTl1ce4m0QbND3-BGOlH6_JaKh4hLTKzfQPwivHdxFpjl-KLWimL-sfTjEvlWLcp8wrYJzaAxjfXavWchLgNUSbdCv1sxIXvQ/s1600/popupfacebook1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgthzpy-RKr2Lo1EzjswkU0Dl1N2yzPQpoZTy6cDBT-D2WTl1ce4m0QbND3-BGOlH6_JaKh4hLTKzfQPwivHdxFpjl-KLWimL-sfTjEvlWLcp8wrYJzaAxjfXavWchLgNUSbdCv1sxIXvQ/s1600/popupfacebook1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1mc2Owh25pfuVVAosISjAqIGwCaRiwdcPHX3ltTcGsrfyUcRMCldCkC8n93IO_9rjaJwokLEuSjKkwabBOl4g_LcBUaW4byILMzW3UEbEyTsQO6EqaZl57F_zoctmpLgSv4PKaLjYzEI/s1600/popupfacebook2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1mc2Owh25pfuVVAosISjAqIGwCaRiwdcPHX3ltTcGsrfyUcRMCldCkC8n93IO_9rjaJwokLEuSjKkwabBOl4g_LcBUaW4byILMzW3UEbEyTsQO6EqaZl57F_zoctmpLgSv4PKaLjYzEI/s1600/popupfacebook2.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWBSdSXFnG1jeI2XS50WF73pVIHAEpzDYeUQOyIdrzv4jvKTAYOSrf_PRWTN-MPmB9cWHX7avScVAyqLo6deiCMVvSy62MCfmw7lgbKzP10P_YUmjI0ucyHO3Vg6in7_WZCwQWOutmnio/s1600/popupfacebook3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWBSdSXFnG1jeI2XS50WF73pVIHAEpzDYeUQOyIdrzv4jvKTAYOSrf_PRWTN-MPmB9cWHX7avScVAyqLo6deiCMVvSy62MCfmw7lgbKzP10P_YUmjI0ucyHO3Vg6in7_WZCwQWOutmnio/s1600/popupfacebook3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5MjJvTDsdNFCfIhIBwS5hf0dBHak9d-HVWgJ09RVirVUp1waMAwpp0Gc13E8PwrzECe7_k1tPXgYVY9Q6JP9IrYreXZbdKH3PDv-klCuMMIN1IHxVueFHfd2OQLAnd3g-SzeemQ7haFg/s1600/popupfacebook4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5MjJvTDsdNFCfIhIBwS5hf0dBHak9d-HVWgJ09RVirVUp1waMAwpp0Gc13E8PwrzECe7_k1tPXgYVY9Q6JP9IrYreXZbdKH3PDv-klCuMMIN1IHxVueFHfd2OQLAnd3g-SzeemQ7haFg/s1600/popupfacebook4.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 14px; line-height: 25.200000762939453px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
Thinking what it is really about, &lt;strong&gt;Pop Facebook&lt;/strong&gt; same as pop-up SMS but now this application is for &lt;a href=&quot;http://www.facebook.com/rultechinc&quot; target=&quot;_blank&quot; title=&quot;RulTech Solutions Private Limited&quot;&gt;Facebook&lt;/a&gt; lovers, where you don&#39;t have visit &lt;a href=&quot;http://www.facebook.com/rultechinc&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt; to read all your post. You will get a popup and notification where you can comment, like,dislike, share and other all functionality of &lt;a href=&quot;http://www.facebook.com/rultechinc&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt; without visiting the site.&lt;br /&gt;
Isn&#39;t this amazing?&lt;br /&gt;
So friends wait till we release the &lt;strong&gt;Pop Facebook&lt;/strong&gt;.&lt;br /&gt;
Screen shots would be soon added....&lt;br /&gt;
Also share your ideas on what type of features should be included and what is not to be included.&lt;br /&gt;
Waiting for your comments...&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/1078243157945927264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/popup-facebook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/1078243157945927264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/1078243157945927264'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/popup-facebook.html' title='Popup Facebook'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgthzpy-RKr2Lo1EzjswkU0Dl1N2yzPQpoZTy6cDBT-D2WTl1ce4m0QbND3-BGOlH6_JaKh4hLTKzfQPwivHdxFpjl-KLWimL-sfTjEvlWLcp8wrYJzaAxjfXavWchLgNUSbdCv1sxIXvQ/s72-c/popupfacebook1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-3404050630366149249</id><published>2012-08-17T17:23:00.002+05:30</published><updated>2012-08-17T17:27:37.964+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="notification"/><category scheme="http://www.blogger.com/atom/ns#" term="Popup Sms pro"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="SMS"/><category scheme="http://www.blogger.com/atom/ns#" term="sms notification"/><category scheme="http://www.blogger.com/atom/ns#" term="sms popup pro"/><category scheme="http://www.blogger.com/atom/ns#" term="sms toast"/><title type='text'>Popup Sms Pro.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h1&gt;
&lt;strong&gt;&lt;br /&gt;Popup Sms Pro.&lt;/strong&gt;&lt;/h1&gt;
&lt;a href=&quot;https://market.android.com/details?id=com.proideaclub.popupsmspro&amp;amp;feature=search_result&quot; target=&quot;_blank&quot;&gt;Download Popup Sms Pro.&lt;/a&gt;&lt;br /&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/message.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/theme1.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/theme2.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/more.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/setting.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/Additional%20Setting.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/Contect%20notification.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/Quick%20Reply.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;288&quot; src=&quot;http://www.proideaclub.in/images/stories/Products/popsmspro/screen1/screen1/edit%20mess.png&quot; style=&quot;border: 0;&quot; width=&quot;192&quot; /&gt;&lt;br /&gt;
Popup SMS Pro... is the version with lots of more features ....if you want you can try the Popup SMS and&lt;br /&gt;
if you feel you require the pro version then go for it the major difference are as follows.&lt;br /&gt;
Full feature list for Popup SMS pro:&lt;br /&gt;
- Convenient popup window on incoming message&lt;br /&gt;
- Quickly reply, delete, forward, call or close the message&lt;br /&gt;
-Customize notifications including sound, vibrate pattern, LED color (if available).&lt;br /&gt;
-Also customize notifications for individual contacts&lt;br /&gt;
-Setup notification reminders (repeating notifications if you miss the first one)&lt;br /&gt;
-Optional privacy mode to hide sender name and message contents&lt;br /&gt;
Plus......&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
1. Customized User Interface, that is themes, you can change the button color and Popup Border Color.&lt;br /&gt;
Check the screen shots for the themes you can make for yourself. Match the theme with your handset and enjoy the app.&lt;br /&gt;
&lt;br /&gt;
2. The color picker gives you million color choices to create your theme. Check out the screen shot.&lt;br /&gt;
You just have select the colors and test the theme and done. Cool!!!!!&lt;br /&gt;
3. Post to Facebook is one of the cool features, which is integrated in this pro version,&lt;br /&gt;
if you want to just have the single feature in one app than you can use Social texts application here.&lt;br /&gt;
but the Popup SMS pro with this feature makes it more convenient way to post your SMS to Facebook, no more SMS charges to send your post to Facebook or no hassles to copy paste the text to update your Facebook status,&lt;br /&gt;
just a single click and update the status...&lt;br /&gt;
4. The post to Facebook has a edit box which lets you edit the message before sending it, you can add your tag line or anything to the text before updating it to Facebook.&lt;br /&gt;
5. Quick reply can let you reply the SMS immediately from the Popup SMS Pro.&lt;br /&gt;
6. Facebook Login &amp;amp; Logout option... so not to worry if you need change the Facebook Login.&lt;br /&gt;
7. Many More coming soon.....Provide your inputs by mailing us or by commenting.......&lt;br /&gt;
Giving us low rating will not help us to improve the features, so please avoid that....&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Popup SMS brings you cool UI, fast and convenient SMS experience. &amp;lt;br/&amp;gt;Popup SMS provides a convenient popup dialog when a message is received that allows you to quickly read and reply or forward or call to messages. Quickly read and reply or forward or call to SMS messages from a convenient popup window. It also provides in-depth customization of message notifications including contact specific sound, vibrate and LED settings. Popup SMS is a tiny application, which is receiving SMS messages as a notification with popup. Have a useful experience with Message Popup. Similar to the SMS Popup app - but is faster, looks better, and is a pleasure to use.&lt;br /&gt;
&lt;br /&gt;
Full feature list for Popup SMS:&lt;br /&gt;
- Convenient popup window on incoming message&lt;br /&gt;
- Quickly reply, delete, forward, call or close the message&lt;br /&gt;
-Customize notifications including sound, vibrate pattern, LED color (if available).&lt;br /&gt;
-Also customize notifications for individual contacts&lt;br /&gt;
-Setup notification reminders (repeating notifications if you miss the first one)&lt;br /&gt;
-Optional privacy mode to hide sender name and message contents&lt;br /&gt;
Relevant keywords:&lt;br /&gt;
Message notification, message popup, sms notification, text message notification, message alert , sms popup, message popup, text popup, sms pop up, text pop up, message pop up, missed text, missed message, missed sms, sms, Facebook, Facebook status&lt;br /&gt;
Developed by:&lt;br /&gt;
- Mitul Nakum&lt;br /&gt;
- Sanjay Patel&lt;br /&gt;
- Pravin Dodia&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/3404050630366149249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/popup-sms-pro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/3404050630366149249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/3404050630366149249'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/popup-sms-pro.html' title='Popup Sms Pro.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-6817494439061821318</id><published>2012-08-17T17:22:00.002+05:30</published><updated>2012-08-17T17:27:54.533+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="notification"/><category scheme="http://www.blogger.com/atom/ns#" term="Popup Sms"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="SMS"/><category scheme="http://www.blogger.com/atom/ns#" term="sms notification"/><category scheme="http://www.blogger.com/atom/ns#" term="sms popup"/><category scheme="http://www.blogger.com/atom/ns#" term="sms toast"/><title type='text'>Popup SMS - Android Aplication</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;img alt=&quot;&quot; height=&quot;156&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/promotional-graphic-new.png?w=300&quot; width=&quot;320&quot; /&gt;&lt;br /&gt;
Popup SMS brings you cool UI, fast and convenient SMS experience. Popup SMS provides a convenient popup dialog when a message is received that allows you to quickly read and reply or forward or call to messages. Quickly read and reply or forward or call to SMS messages from a convenient popup window. It also provides in-depth customization of message notifications including contact specific sound, vibrate and LED settings. Popup SMS is a tiny application, which is receiving SMS messages as a notification with popup. Have a useful experience with Message Popup. Similar to the SMS Popup app - but is faster, looks better, and is a pleasure to use.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/pspref.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;250&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/pspref.png?w=200&quot; width=&quot;166&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/pspopup.png?w=200&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;242&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/pspopup.png?w=200&quot; width=&quot;162&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/psabout.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;250&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/psabout.png?w=200&quot; width=&quot;166&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://market.android.com/details?id=com.proideaclub.popupsms&amp;amp;feature=search_result&quot;&gt;Download Popup SMS form Android Market&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;img alt=&quot;&quot; src=&quot;http://blogs.proideaclub.in/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif&quot; title=&quot;More...&quot; /&gt;Full feature list:&lt;br /&gt;
- Convenient popup window on incoming message&lt;br /&gt;
- Quickly reply, delete, forward, call or close the message&lt;br /&gt;
- Customize notifications including sound, vibrate pattern, LED color (if available).&lt;br /&gt;
- Also customize notifications for individual contacts&lt;br /&gt;
- Setup notification reminders (repeating notifications if you miss the first one)&lt;br /&gt;
- Optional privacy mode to hide sender name and message contents&lt;/div&gt;
&lt;div&gt;
Developed by :&lt;/div&gt;
&lt;div&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mitul Nakum&lt;/div&gt;
&lt;div&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sanjay Patel&lt;/div&gt;
&lt;div&gt;
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pravin Dodia&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/6817494439061821318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/popup-sms-android-aplication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/6817494439061821318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/6817494439061821318'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/popup-sms-android-aplication.html' title='Popup SMS - Android Aplication'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-3277229476941253434</id><published>2012-08-17T17:21:00.001+05:30</published><updated>2012-08-17T17:28:20.421+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android 3.1 Platform"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><title type='text'>Android 3.1 Platform : Whats new for Developers...?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;h3&gt;
The Android 3.1 platform adds refinements and new capabilities that developers can build on, to create powerful and engaging application experiences on tablets and other large-screen devices.&lt;/h3&gt;
&lt;div&gt;
&lt;div dir=&quot;ltr&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;Open Accessory API for rich interaction with peripherals&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Android 3.1 introduces a new API for integrating hardware accessories with applications running on the platform. The API provides a way to interact across a wide range of peripherals, from robotics controllers to musical equipment, exercise bicycles, and more.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The API is based on a new USB (Universal Serial Bus) stack and services that are built into the platform. The platform provides services for discovering and identifying connected hardware, as well as for notifying interested applications that the hardware is available.&lt;img alt=&quot;&quot; src=&quot;http://blogs.proideaclub.in/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif&quot; title=&quot;More...&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
When a user plugs in a USB accessory, the platform receives identifying information such as product name, accessory type, manufacturer, and version. The platform sets up communication with the accessory and uses its information to notify and launch a targeted app, if one is available. Optionally, an accessory can provide a URL that lets users find and download an app that works with the accessory. These discovery features make first-time setup easier for the user and ensure that an appropriate application is available for interacting with the connected hardware.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
For application developers and accessory manufacturers, accessory mode offers many new ways to engage users and build powerful interaction experiences with connected hardware.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
To learn more about how to develop applications that interact with accessories, see the&amp;nbsp;USB Accessory&amp;nbsp;documentation.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;USB host API&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Android 3.1 provides built-in platform support for USB host mode and exposes an API that lets applications manage connected peripherals. On devices that support host mode, applications can use the API to identify and communicate with connected devices such as audio devices. input devices, communications devices, hubs, cameras, and more.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
To learn more about how to develop applications that interact with USB devices, see the&amp;nbsp;USB Host&amp;nbsp;documentation.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;Input from mice, joysticks, and gamepads&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Android 3.1 extends the input event system to support a variety of new input sources and motion events, across all views and windows. Developers can build on these capabilities to let users interact with their applications using mice, trackballs, joysticks, gamepads, and other devices, in addition to keyboards and touchscreens.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
For mouse and trackball input, the platform supports two new motion event actions: scroll (horizontal or vertical) such as from a scrollwheel; and hover, which reports the location of the mouse when no buttons are pressed. Applications can handle these events in any way needed.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
For joysticks and gamepads, the platform provides a large number of motion axes that applications can use from a given input source, such as X, Y, Hat X, Hat Y, rotation, throttle, pressure, size, touch, tool, orientation, and others. Developers can also define custom axes if needed, to capture motion in additional ways. The platform provides motion events to applications as a batch, and applications can query the details of the movements included in the batch, for more efficient and precise handling of events.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Applications can query for the list of connected input devices and the motion ranges (axes) supported by each device. Applications can also handle multiple input and motion events from a single input device. For example, an application can use mouse and joystick and mouse event sources from a single input device.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;Resizable Home screen widgets&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Developers can now create Home screen widgets that users can resize horizontally, vertically, or both. By simply adding an attribute to the declaration of a widget, the widget becomes resizable horizontally, vertically, or both. This lets users customize the display of the widget content and display more of it on their Home screens.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;MTP API for integrating with external cameras&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
In Android 3.1, a new MTP (Media Transfer Protocol) API lets developers write apps that interact directly with connected cameras and other PTP devices. The new API makes it easy for applications to receive notifications when devices are attached and removed, manage files and storage on those devices, and transfer files and metadata to and from them. The MTP API implements the PTP (Picture Transfer Protocol) subset of the MTP specification.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;RTP API, for control over audio streaming sessions&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Android 3.1 exposes an API to its built-in RTP (Real-time Transport Protocol) stack, which applications can use to directly manage on-demand or interactive data streaming. In particular, apps that provide VOIP, push-to-talk, conferencing, and audio streaming can use the API to initiate sessions and transmit or receive data streams over any available network.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;strong&gt;Performance optimizations&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Android 3.1 includes a variety of performance optimizations that help make applications faster and more responsive. Some of the optimizations include:&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A new LRU cache class lets applications benefit from efficient caching. Applications can use the class to reduce the time spent computing or downloading data from the network, while maintaining a sensible memory footprint for the cached data.&lt;/li&gt;
&lt;li&gt;The UI framework now supports partial invalidates in hardware-accelerated Views, which makes drawing operations in those Views more efficient.&lt;/li&gt;
&lt;li&gt;A new graphics method,&amp;nbsp;setHasAlpha(), allows apps to hint that a given bitmap is opaque. This provides an extra performance boost for some types of blits and is especially useful for applications that use ARGB_8888 bitmaps.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/3277229476941253434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/android-31-platform-whats-new-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/3277229476941253434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/3277229476941253434'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/android-31-platform-whats-new-for.html' title='Android 3.1 Platform : Whats new for Developers...?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-7100922425297815979</id><published>2012-08-17T17:20:00.004+05:30</published><updated>2012-08-17T17:28:41.295+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Facebook SMS"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="SMS"/><category scheme="http://www.blogger.com/atom/ns#" term="SMS 2 facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="SMS to Facbook"/><category scheme="http://www.blogger.com/atom/ns#" term="Social Texts"/><title type='text'>Social Texts</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;strong&gt;Publish your sms directly to Facebook wall&lt;/strong&gt;&lt;br /&gt;
&lt;img alt=&quot;&quot; class=&quot;aligncenter&quot; height=&quot;184&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/marketlogo.png?w=300&quot; width=&quot;184&quot; /&gt;&lt;br /&gt;
&lt;img alt=&quot;&quot; class=&quot;alignleft&quot; height=&quot;256&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/screenshot1.png?w=200&quot; width=&quot;171&quot; /&gt;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/screenshot2.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignleft&quot; height=&quot;256&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/screenshot2.png?w=200&quot; width=&quot;171&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://rultech.files.wordpress.com/2012/08/screenshot3.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;256&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/screenshot3.png?w=200&quot; width=&quot;171&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;
&lt;a href=&quot;https://market.android.com/details?id=com.proideaclub.socialtextfress&amp;amp;feature=search_result&quot; target=&quot;_blank&quot; title=&quot;Android Market&quot;&gt;&lt;strong&gt;Download From Market&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;
&lt;img alt=&quot;&quot; height=&quot;192&quot; src=&quot;http://rultech.files.wordpress.com/2012/08/url.png?w=300&quot; width=&quot;192&quot; /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/7100922425297815979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/android-market.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/7100922425297815979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/7100922425297815979'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/android-market.html' title='Social Texts'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-4013196026143347161</id><published>2012-08-17T17:19:00.005+05:30</published><updated>2012-08-17T17:29:03.334+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="FingerKbPad"/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="Remote Control"/><category scheme="http://www.blogger.com/atom/ns#" term="Remote keyboard."/><category scheme="http://www.blogger.com/atom/ns#" term="Remote mouse"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><title type='text'>FingerKBPad</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;strong&gt;Use your Android Powered Phone as Mouse And Keyboard for your System And Laptop.&lt;/strong&gt;

&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixBygZY0CHGsT_YiT3ZSsElvwLQW1KYLLpjcQy-B9QJjDkTrf-X-C7kHE4EXm4RgQXsm5Lg-lmAxrUrJAl5gxRl3XIJb_SviDtKYN-kuiTdmhIlPEmBrQEOKkeGK7l9n7ljzHkUAEW_A/s1600/tscreen.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;120&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixBygZY0CHGsT_YiT3ZSsElvwLQW1KYLLpjcQy-B9QJjDkTrf-X-C7kHE4EXm4RgQXsm5Lg-lmAxrUrJAl5gxRl3XIJb_SviDtKYN-kuiTdmhIlPEmBrQEOKkeGK7l9n7ljzHkUAEW_A/s200/tscreen.png&quot; width=&quot;120&quot; /&gt;&lt;/a&gt;

&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&amp;nbsp;&amp;nbsp;

&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNMC80ojca-VvZFQts-lSJCsETGLTviYERV45jMUmSRRvNh3mFubRw9is7RXxeUZfXD4576TolwzL9JP29OWlO6UAJPssShyphenhyphenbCy2-cKn6QDwvP5404gwGyATQccFVeJ1idgqXsV4jUWw/s1600/main.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNMC80ojca-VvZFQts-lSJCsETGLTviYERV45jMUmSRRvNh3mFubRw9is7RXxeUZfXD4576TolwzL9JP29OWlO6UAJPssShyphenhyphenbCy2-cKn6QDwvP5404gwGyATQccFVeJ1idgqXsV4jUWw/s1600/main.png&quot; width=&quot;259&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZP_HpysULNT8SPQu_UpJT-caz5V5qMLgYD7BRboeRThFZPuM715hnWnCXY4SIS_7BIx5YsNKU3KvP0ggJ4ho2iz0ObhUtpZUv4mRovgowP-HeHL627YyzL77hpubd0vpUO4IdhMKVlA/s1600/Mpadwait.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZP_HpysULNT8SPQu_UpJT-caz5V5qMLgYD7BRboeRThFZPuM715hnWnCXY4SIS_7BIx5YsNKU3KvP0ggJ4ho2iz0ObhUtpZUv4mRovgowP-HeHL627YyzL77hpubd0vpUO4IdhMKVlA/s1600/Mpadwait.png&quot; width=&quot;259&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNjKqDfF7OhyphenhyphencGorr9k7sk2UkIfonmphlC4sbNqqkX7sRFtuQTEyb2RvHhjXWk4ZOT3Elo0wsad1XUgUq5mla4wWJyO7MupKDD1P2TrJy0anjygXJnUce26qaq38_0fYetknjfzaOvhg/s1600/ippref.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNjKqDfF7OhyphenhyphencGorr9k7sk2UkIfonmphlC4sbNqqkX7sRFtuQTEyb2RvHhjXWk4ZOT3Elo0wsad1XUgUq5mla4wWJyO7MupKDD1P2TrJy0anjygXJnUce26qaq38_0fYetknjfzaOvhg/s1600/ippref.png&quot; width=&quot;259&quot; /&gt;&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigC5CBr0MURem1SdCrIC8mKz8VUI9jelcS5aabQfGvNDrDBOGli0wqSCVCi5k9QwNwioAzHJ9cWwNwj-EqNln0MHdmbIU8ZSwvrdYSqrcwkR5O3ZR2GCxoy8F-2lGapkwNha1ZxC4d9Q/s1600/KBpad.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigC5CBr0MURem1SdCrIC8mKz8VUI9jelcS5aabQfGvNDrDBOGli0wqSCVCi5k9QwNwioAzHJ9cWwNwj-EqNln0MHdmbIU8ZSwvrdYSqrcwkR5O3ZR2GCxoy8F-2lGapkwNha1ZxC4d9Q/s1600/KBpad.png&quot; width=&quot;259&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;
&lt;strong&gt;&lt;a href=&quot;https://market.android.com/details?id=com.shashwat.FingerKbPad&amp;amp;feature=search_result&quot;&gt;Download from Market&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvI6-detKe__QomBvExDZp9yZ-RRCft8dpxSv6RIK7VyFsqLvAmLDWFJ7ypqgWNApJo_Vl8eTJb411R0WWs3JLZQMz-c8FRZDDFUwOkjTLW1QEuGmTK0yj1pd7uwtWF5cl3AElA3tytw/s1600/market.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;126&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvI6-detKe__QomBvExDZp9yZ-RRCft8dpxSv6RIK7VyFsqLvAmLDWFJ7ypqgWNApJo_Vl8eTJb411R0WWs3JLZQMz-c8FRZDDFUwOkjTLW1QEuGmTK0yj1pd7uwtWF5cl3AElA3tytw/s1600/market.png&quot; width=&quot;126&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/4013196026143347161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/fingerkbpad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/4013196026143347161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/4013196026143347161'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/fingerkbpad.html' title='FingerKBPad'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixBygZY0CHGsT_YiT3ZSsElvwLQW1KYLLpjcQy-B9QJjDkTrf-X-C7kHE4EXm4RgQXsm5Lg-lmAxrUrJAl5gxRl3XIJb_SviDtKYN-kuiTdmhIlPEmBrQEOKkeGK7l9n7ljzHkUAEW_A/s72-c/tscreen.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33041597313956388.post-8093911919306537482</id><published>2012-08-17T17:18:00.003+05:30</published><updated>2012-08-17T17:29:21.029+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Application"/><category scheme="http://www.blogger.com/atom/ns#" term="Anti Insects"/><category scheme="http://www.blogger.com/atom/ns#" term="Anti Mosquito."/><category scheme="http://www.blogger.com/atom/ns#" term="Proideaclub"/><category scheme="http://www.blogger.com/atom/ns#" term="proideaclub blogs"/><category scheme="http://www.blogger.com/atom/ns#" term="rultech blogs"/><title type='text'>Anti-Insects</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
The App name itself describes the application, But still i will give you a brief idea about it.&lt;/div&gt;
&lt;div&gt;
There are about 3500 known mosquito species in the world and they all react slightly different to the repeller. Use the pitch selector to find optimal repelling frequency for the mosquitos in your region.&lt;/div&gt;
&lt;div&gt;
As the Animals and Insects can hear the high frequency noise,&lt;/div&gt;
&lt;div&gt;
we have use 3 different high frequency to keep away insects, mainly mosquitoes and other insects&lt;/div&gt;
&lt;div dir=&quot;ltr&quot;&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqSzBfxQII0v7jBMz2kh8HuGS-EQ7y1FLTnPqmxIOPcW5MHAZcabyoMlXOXZ7aJ-54hkFtSAuEfAECLmwvxqY51_tONUMG9k9jvSyKdZynYTngR2V-mQh6rRXbeRg-EIfn2kpAkROVWA/s144/mainapp.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqSzBfxQII0v7jBMz2kh8HuGS-EQ7y1FLTnPqmxIOPcW5MHAZcabyoMlXOXZ7aJ-54hkFtSAuEfAECLmwvxqY51_tONUMG9k9jvSyKdZynYTngR2V-mQh6rRXbeRg-EIfn2kpAkROVWA/s200/mainapp.png&quot; width=&quot;133&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd3LD-WfQPKxT1_vyQv3VYFnMu3eeW5uEJwUgqPAnowLudVWuPDA-znYpd7EdYf5DD4K_noCtknpezneRZwX-A7-OwjKkLSBO_NK4rOnAwQKRph_uZc3Gf10QhjQU9ziVFXf09eD4IzA/s1600/AntiInsects+new+Logo+copy.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd3LD-WfQPKxT1_vyQv3VYFnMu3eeW5uEJwUgqPAnowLudVWuPDA-znYpd7EdYf5DD4K_noCtknpezneRZwX-A7-OwjKkLSBO_NK4rOnAwQKRph_uZc3Gf10QhjQU9ziVFXf09eD4IzA/s200/AntiInsects+new+Logo+copy.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTN4o-nfhyphenhyphenkpSNcn13aP5m5TGLodM8of1Ab5ebfN3oNe-knEeEO653iuZSFb4_6GEr4WrROrF6ByQHLuRRZsKAaAguUSBZYepLRBq0lLf1BLcI69BT9CXrjkzh8pZTlOAoq3g4tWmgg/s1600/market.png&quot; title=&quot;Android Market&quot;&gt;You can download it from market.&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTN4o-nfhyphenhyphenkpSNcn13aP5m5TGLodM8of1Ab5ebfN3oNe-knEeEO653iuZSFb4_6GEr4WrROrF6ByQHLuRRZsKAaAguUSBZYepLRBq0lLf1BLcI69BT9CXrjkzh8pZTlOAoq3g4tWmgg/s1600/market.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;140&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTN4o-nfhyphenhyphenkpSNcn13aP5m5TGLodM8of1Ab5ebfN3oNe-knEeEO653iuZSFb4_6GEr4WrROrF6ByQHLuRRZsKAaAguUSBZYepLRBq0lLf1BLcI69BT9CXrjkzh8pZTlOAoq3g4tWmgg/s1600/market.png&quot; width=&quot;140&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rultech.blogspot.com/feeds/8093911919306537482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rultech.blogspot.com/2012/08/anti-insects.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/8093911919306537482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33041597313956388/posts/default/8093911919306537482'/><link rel='alternate' type='text/html' href='http://rultech.blogspot.com/2012/08/anti-insects.html' title='Anti-Insects'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/17882316782759606256</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqSzBfxQII0v7jBMz2kh8HuGS-EQ7y1FLTnPqmxIOPcW5MHAZcabyoMlXOXZ7aJ-54hkFtSAuEfAECLmwvxqY51_tONUMG9k9jvSyKdZynYTngR2V-mQh6rRXbeRg-EIfn2kpAkROVWA/s72-c/mainapp.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>