Showing posts with label iphone. Show all posts
Showing posts with label iphone. Show all posts

Wednesday, June 16, 2010

The Future of iPhone Multi-Tasking

Marco Arment on iPhone Multitasking:

One of my most common feature requests is for Instapaper to periodically download articles in the background. A lot of people forget to launch the app to let it download content before going underground or boarding a plane.
I’ve already received multiple emails from people who are excited for iOS 4’s multitasking because they can’t wait for this to finally stop being an issue, because they think Instapaper will be able to download articles periodically in the background.
It’s painful to respond, crushing their hopes, to tell them that the iOS multitasking system doesn’t allow me to do that.

The solution he proposes:

  • The application gives the system an NSURLRequest and an ideal refresh interval, such as every 30 minutes, every few hours, or every day.
  • iOS executes that request, whenever it deems that it should, and saves the response to a local file.
  • Next time the application launches, iOS hands it an NSData of the most recent response.
It's an improvement, although it doesn't go far enough for me. There's a couple of enhancements I'd love to see.

Idle Processing
If the user isn't actively using the phone when the data is retrieved, it would be great if the application were given a chance to process that information, and possibly notify the user (even if this requires user opt-in).

For instance, if you've got a stock application and it periodically retrieves the prices of the equities within your portfolio, it would be nice if it could be set to notify you when prices cross certain thresholds, or change dramatically, rather than having to launch the application before it's given a chance to process the data.

Server Push
The polling model will do, but since the iPhone already supports push notifications, it seems like supporting push notifications whose target is an application rather than the user would also be handy. Instead of having your stock application download regular price updates, the server-side element could watch stock prices, looking for price changes of enough difference to matter, then push those prices to your application.

No Guarantees
As with the rest of Marco's solution, I think it's reasonable to give iOS some decision-making authority with respect to when and how these things are processed. I don't expect the phone to run out making regular requests to the server or sending lots of push notifications and firing up applications when the battery's already low.

The Future of iPhone Multitasking
I suspect Apple has already considered approaches like what Marco has proposed and the enhancements I'm suggesting here. I also suspect that they've decided explicitly not to take these approaches for the time being.

I can live with that. They're expanding on multitasking for iOS4, and applications will take some time to catch up. Once developers, consumers and Apple have had the chance to take iOS 4 multitasking in hand, there will be a chance to expand upon that further, and I think the proposal offered by Marco and the enhancements I'm suggesting here are good examples of the directions they can take while still taking a cautious approach to multi-tasking in iOS.

Monday, April 19, 2010

Telus iPhone Visual Voicemail

I was pleased to see that Telus announced and rolled out Visual Voicemail, as was implied in the Carrier Update file I received and analyzed.


I guess that means I may well look into the next carrier update file I receive, since the first one gave me a clue to an upcoming rollout.

Wednesday, March 17, 2010

Telus iPhone Carrier Update

This morning, iTunes warned me that there was a carrier update available for my iPhone. The 'more info' button opened a link that explained the process, but didn't offer any details about what the update contained, other than updates with regard to my settings for my carrier, Telus.


In the spirit of interested inquiry, I thought I'd follow in the footsteps of others, and take a peek inside the update file. I started by copying the carrier file to a temporary folder and extracting the contents:

$ mkdir ~/telus
$ cp ~/Library/iTunes/iPhone\ Carrier\ Support/Telus_ca.ipcc ~/telus/telus.zip$ cd ~/telus$ unzip telus.zip
Archive: telus.zip
creating: Payload/
creating: Payload/Telus_ca.bundle/
inflating: Payload/Telus_ca.bundle/carrier.plist
inflating: Payload/Telus_ca.bundle/Default_CARRIER_TELUS.png
inflating: Payload/Telus_ca.bundle/FSO_CARRIER_TELUS.png
inflating: Payload/Telus_ca.bundle/Info.plist
inflating: Payload/Telus_ca.bundle/version.plist

After that, I took a quick peek at the carrier.plist, but it was in binary format, so I had to convert the .plist files to XML:


$ plutil -convert xml1 *.plist

That let me take a look at the .plist files. The info.plist and version.plist files were very dull, looks like metadata about the bundle. The carrier.plist file was slightly more interesting:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BookmarkURLs</key>
<array>
<dict>
<key>BookmarkName</key>
<string>TELUS Web</string>
<key>BookmarkURL</key>
<string>http://m.telusmobility.com/homepage</string>
</dict>
</array>
<key>CarrierBookmarks</key>
<array>
<dict>
<key>Title</key>
<string>Web TELUS</string>
<key>URL</key>
<string>http://m.telusmobility.com/homepage</string>
</dict>
</array>
<key>CarrierName</key>
<string>TELUS</string>
<key>IntlDataRoamingSwitch</key>
<true/>
<key>MMS</key>
<dict>
<key>GroupModeEnabled</key>
<false/>
<key>MMSC</key>
<string>http://aliasredirect.net/proxy/mmsc</string>
<key>MaxRecipients</key>
<integer>20</integer>
<key>Proxy</key>
<string>74.49.0.18:80</string>
</dict>
<key>MaxBluetoothModemConnections</key>
<integer>1</integer>
<key>MyAccountURL</key>
<string>http://m.telusmobility.com/homepage</string>
<key>MyAccountURLTitle</key>
<string>TELUS Web</string>
<key>Services</key>
<array>
<dict>
<key>ServiceCode</key>
<string>#411</string>
<key>ServiceName</key>
<string>Directory Assistance</string>
</dict>
<dict>
<key>ServiceCode</key>
<string>#411</string>
<key>ServiceName</key>
<string>Assistance-annuaire</string>
</dict>
<dict>
<key>ServiceCode</key>
<string>#8294</string>
<key>ServiceName</key>
<string>TAXI</string>
</dict>
<dict>
<key>ServiceCode</key>
<string>#2886</string>
<key>ServiceName</key>
<string>Roadside Assistance</string>
</dict>
<dict>
<key>ServiceCode</key>
<string>#2886</string>
<key>ServiceName</key>
<string>Assistance Routière</string>
</dict>
</array>
<key>ShowCallForwarded</key>
<false/>
<key>ShowCallForwarding</key>
<false/>
<key>ShowDialAssist</key>
<false/>
<key>ShowTTY</key>
<false/>
<key>StatusBarImages</key>
<array>
<dict>
<key>AllowPrefixMatching</key>
<false/>
<key>CarrierName</key>
<string>TELUS</string>
<key>DefaultImage</key>
<string>Default_CARRIER_TELUS.png</string>
<key>FullScreenOpaqueImage</key>
<string>FSO_CARRIER_TELUS.png</string>
</dict>
<dict>
<key>AllowPrefixMatching</key>
<false/>
<key>CarrierName</key>
<string>TELUS UMTS</string>
<key>DefaultImage</key>
<string>Default_CARRIER_TELUS.png</string>
<key>FullScreenOpaqueImage</key>
<string>FSO_CARRIER_TELUS.png</string>
</dict>
</array>
<key>StockSymboli</key>
<array>
<dict>
<key>symbol</key>
<string>T.TO</string>
</dict>
<dict>
<key>symbol</key>
<string>TU</string>
</dict>
</array>
<key>SupportedSIMs</key>
<array>
<string>302220</string>
</array>
<key>SupportsNITZ</key>
<true/>
<key>SupportsUserBusyCauseCode</key>
<true/>
<key>VVMIgnoresIntlDataRoaming</key>
<false/>
<key>VisualVoicemailServiceName</key>
<string>IMAP</string>
<key>apns</key>
<array>
<dict>
<key>apn</key>
<string>sp.telus.com</string>
<key>password</key>
<string></string>
<key>signature</key>
<data>
...
</data>
<key>type-mask</key>
<integer>7</integer>
<key>username</key>
<string></string>
</dict>
<dict>
<key>apn</key>
<string>isp.telus.com</string>
<key>password</key>
<string></string>
<key>signature</key>
<data>
...
</data>
<key>type-mask</key>
<integer>48</integer>
<key>username</key>
<string></string>
</dict>
<dict>
<key>apn</key>
<string>sp.telus.com</string>
<key>password</key>
<string></string>
<key>signature</key>
<data>
...
</data>
<key>type-mask</key>
<integer>6</integer>
<key>username</key>
<string></string>
</dict>
</array>
<key>com.apple.voicemail.imap</key>
<dict>
<key>BeaconAddress</key>
<string>474663</string>
<key>ClientManagesTrash</key>
<false/>
<key>GreetingNotification</key>
<true/>
<key>MaxGreetingDuration</key>
<integer>60</integer>
<key>MaxPINLength</key>
<integer>10</integer>
<key>MinPINLength</key>
<integer>4</integer>
<key>UsesMWI</key>
<true/>
<key>UsesSSL</key>
<false/>
</dict>
<key>voicemail_context</key>
<integer>0</integer>
</dict>
</plist>

I won't claim to understand the meaning of all those settings, but some of them seem to point to Telus supporting visual voicemail, which would be interesting. And finally, the .PNG files, once decoded from iPhone PNG format, were themselves pretty boring. Very small transparent images of the word "TELUS" in all caps; these are referenced in the .plist above as Status Bar Images.

Thursday, August 13, 2009

Breeze - Alan Lynse / Cascada Mobile - DemoCamp Toronto 21

Alan Lynse of Cascada Mobile presented Breeze at DemoCamp Toronto 21 at the Velma Rogers Theatre (333 Bloor Street East) on July 28th, 2009. Breeze is a platform for building mobile applications using web technologies that run on a wide array of mobile phone platforms (iPhone, Android, etc.):


In this case, not only can you click through to YouTube, I recommend that you do, since part of this demonstration involves coding in Eclipse, which is a lot easier on your eyes if you switch to the larger HD mode.

Seems like a good way for companies to build simple applications that cross all handsets. If you want the polish of a fully native application that's tailored to the capabilities and design of a particular device, this probably won't cut it, but not everybody needs that, particularly for the first pass.

I don't see this surplanting native mobile application development any time soon, but it's a useful option to keep in mind.

Sunday, February 1, 2009

Apple should ...

Many people who try to give Apple advice seem to ignore that which has made Apple strong. For instance, when The Apple Blog suggests:

To make big strides in the mobile handset market, Apple should aim for the Pearl and Curve market space, either by introducing a simplified, lower-cost iPhone Nano, or by releasing a brand new iPhone model, but keeping the 3G around at a discounted price.
They should do nothing of the sort. RIM introduced the Pearl and the Curve basically because they'd failed to appeal sufficiently to the consumer market, because they had failed to put a great camera and good media support into the blackberries. In essence, they admitted that they were unable or unwilling to put together a single device to meet the needs of both markets.

Apple shouldn't do that, for more than one reason. First of all, model proliferation is where madness lies, particularly for application development. If you have to write an iPhone app and you're going to constantly ask yourself, "What's the resolution? Does this model have a camera?", the experience is significantly more complicated, and that comes out in your application design and choices.

Secondly, Apple is known for its design and its simplicity -- at this point, I don't think Apple needs to admit another model is necessary. At best, something like an iPhone nano, as suggested in the pre-macworld coverage: the same basic device in a smaller package. But, frankly, I think they should focus on building the best damn one model they can for several years to come yet.

Tuesday, October 28, 2008

Demand for iPhone Developers up Infinite Percent

Since the iPhone was introduced, demand for iPhone developers has skyrocketed to infinity when compared to the previous non-existent demand.  Now that the iPhone has been released, it seems that some people occasionally want to hire people to develop for it.  Truly stunning news from the Apple Blog.


Is this really news?  Of course demand for development in a totally new technology is showing significant growth.  That's true of any technology that's seeing any real new adoption, and it's certainly true that the iPhone falls into that category.