iOS green screen of death

I remember the days when windows used to be plagued with the lovely blue screen of death. It used to be a regular occurrence especially if you installed a third party driver or hardware that windows wasn’t particularly fond of. I have since switched to MacOS and have never experience such events ever again.

Now I mostly use mobile devices such as an iPad and iPhone to complete 90% of my work. And I must say I spend most time on these types of devices. I use both of the devices for both work and play. Which brings me to what had happened few days ago. I was on FaceTime and my iPhone 6S Plus running 10.2 locked up with the following green like screen:

iOS green screen of death

Nothing was responsive and I had to perform a hard reboot (home+power). The phone did go back to normal. I did some googling and I can’t figure out what this is? If anyone has any ideas feel free to drop me a line.

Android: versionCode vs. versionName

When you are releasing an Android application you are faced with deciding of putting a versionCode and versionName. Both are usually found in your manifest. However, I have started to input them in my Gradle and more developers have started to do the same. But what the heck is the difference between the two.

Android:versionCode – An internal version number. Not visible to users.

Android:versionName – The version name shown to users.

My releases usually look as follows:

versionCode – 1
versionName – 1.0

Lets pretend I have just updated my app to the next version, it would look as follows:

versionCode – 2
versionName – 1.1

Full detailed explanation can be found under Android Deveoper Guide.

The importance of info.plist in iOS 10

Since iOS 9 Info.plist has become a very important file especially during the app submission process. I think almost every developer has had a rejection notice by now due to a missing element in the info.plist directive. When iOS 10 was released Info.plist has become the most important file. I’ve had builds simply disappear from the iTunes.connect  dashboard simply because I was lacking a key-string that was required to be part of Info.plist.

The most common key-strings that I have missed are:

<string>This app requires access to the photo library.</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app does not require access to the microphone.</string>
<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera.</string>

Here is a full list:

Apple Music:

<key>NSAppleMusicUsageDescription</key>
<string>My description about why I need this capability</string>
Bluetooth:

<key>NSBluetoothPeripheralUsageDescription</key>
<string>My description about why I need this capability</string>
Calendar:

<key>NSCalendarsUsageDescription</key>
<string>My description about why I need this capability</string>
Camera:

<key>NSCameraUsageDescription</key>
<string>My description about why I need this capability</string>
Contacts:

<key>NSContactsUsageDescription</key>
<string>My description about why I need this capability</string>
Health Share:

<key>NSHealthShareUsageDescription</key>
<string>My description about why I need this capability</string>
Health Update:

<key>NSHealthUpdateUsageDescription</key>
<string>My description about why I need this capability</string>
Home Kit:

<key>NSHomeKitUsageDescription</key>
<string>My description about why I need this capability</string>
Location:

<key>NSLocationUsageDescription</key>
<string>My description about why I need this capability</string>
Location (Always):

<key>NSLocationAlwaysUsageDescription</key>
<string>My description about why I need this capability</string>
Location (When in use):

<key>NSLocationWhenInUseUsageDescription</key>
<string>My description about why I need this capability</string>
Microphone:

<key>NSMicrophoneUsageDescription</key>
<string>My description about why I need this capability</string>
Motion (Accelerometer):

<key>NSMotionUsageDescription</key>
<string>My description about why I need this capability</string>
Photo Library:

<key>NSPhotoLibraryUsageDescription</key>
<string>My description about why I need this capability</string>
Reminders:

<key>NSRemindersUsageDescription</key>
<string>My description about why I need this capability</string>
Siri:

<key>NSSiriUsageDescription</key>
<string>My description about why I need this capability</string>
Speech Recognition:

<key>NSSpeechRecognitionUsageDescription</key>
<string>My description about why I need this capability</string>

The complete list can be found on Apple’s developer website. 

iOS Version, Build, CFBundleVersion and CFBundleShortVersionString

When you are building an app you are faced with version number and build number along with properly identifying the two in your plist. Here’s a quick summary of the two:

XCODE                           PLIST

Version                =    CFBundleShortVersionString
Build number    =   CFBundleVersion

Important note: Build number (CFBundleVersion) has to be a pure version number like 1.2.3 when you want to upload your application to the iOS App Store.

The two are easily mistaken for one another. Hope this helps those who get the two mixed up.

Does your 32-bit iOS application need to be updated?

Apple has all the earmarks of being wanting to drop bolster for 32-bit applications in a forthcoming form of iOS. The ready exchange displayed when propelling a 32-bit application on iOS 10.3 beta 1 now cautions clients that the application should be refreshed to keep taking a shot at future variants of iOS. This proposes iOS 11 expected in the not so distant future could be the principal adaptation to just support 64-bit applications.

Apple has upheld 64-bit applications on iOS since the dispatch of the iPhone 5s in September 2013. Apple has additionally required designers submit new applications with 64-bit bolster since February 2015 and application refreshes since June 2015.

While legacy 32-bit applications still in the App Store have kept on being upheld, iOS 9 incorporated a ready when first propelling 32-bit applications that told clients the legacy application may back off gadget execution.

Apple has changed the ready exchange on iOS 10.3 beta 1 to caution that support will be expelled in future iOS forms.

If you have a 32-bit application here is some of the messages your application might trigger.

From iOS 10.2.1:

“YOUR APP NAME” May Slow Down Your iPad

The developer of this app needs to update it to improve its compatibility.

And iOS 10.3 beta 1:

“YOUR APP NAME” Needs to Be Updated

This app will not work with future versions of iOS. The developer of this app needs to update it to improve its compatibility.

For applications that are still in the App Store, the ready exchange ought to put weight on application proprietors to get with the circumstances or face applications being expelled from the App Store.

Back in September, Apple point by point arrangements to start cleansing “problematic and abandoned apps” from the App Store in one of the principal moves to concentrate on application quality over list amount. The next month, Apple was said to have expelled about 50,000 applications from the App Store.

If you are require your application to be updated from 32-bit to 64-bit, we can certainly provide you with that service.

iOS update might say a final goodbye to 32-bit applications

Beta forms of iOS 10.3, the first was issued a week ago, create cautioning messages when you attempt to run more seasoned 32-bit applications. The message, initially found by PSPDFKit CEO and application engineer Peter Steinberger, cautions that the applications “won’t work with future renditions of iOS” and that the application must be overhauled by its designer to keep running. The applications still keep running in iOS 10.3, yet it appears to be likely that iOS 11 will drop bolster for them totally.

In spite of the fact that the mistake message doesn’t expressly say the application’s 32-bit or 64-bit support, it’s certainly just more seasoned 32-bit applications that trigger the notice. Comparable messages that did expressly specify 64-bit support were available in the betas of iOS 10.0, yet they were evacuated in the last arrival of the product. Apple has required 64-bit bolster for all new application entries since February of 2015 and all application overhaul entries since June 2015, so any applications that are as yet tossing this blunder haven’t been touched by their engineer in no less than 18 months (designers could include 64-bit bolster as ahead of schedule as 2013, yet a large portion of them selected not to until it turned into a necessity).

To a limited extent in light of Apple’s aggregate control of its equipment, working framework, and application conveyance stage, iOS’ move from 32-bit programming to 64-bit programming has been exceptionally smooth and brisk. The initial 64-bit release of Windows was discharged in 2005, and however 64-bit Windows has more often than not been the default since the Windows 7 time, there’s still a 32-bit adaptation of Windows 10, despite everything it transports on some low-end equipment. Macintosh OS X (now macOS) started to incorporate 64-bit bolster with the OS beginning in 2003, a procedure that wasn’t finished until 2012; current variants of the OS can even now run 32-bit applications that aren’t generally inconsistent. Android’s 64-bit move is finished in the event that you have a more current telephone, yet some new telephones still ship with 32-bit Android, and more established telephones (even those that really get programming overhauls and have 64-bit equipment support) will keep on using 32-bit Android.

Expelling 32-bit bolster from iOS would likewise dovetail with another exertion Apple is making to expel old and unmaintained programming from the App Store so individuals can’t discover it in any case. Apple is endeavoring to contact application engineers so that any individual who needs to upgrade their applications still can, yet they won’t be permitted to remain up uncertainly. On the off chance that iOS 11 drops bolster for the 32-bit iPhone 5 and 5C and the fourth-era iPad, expelling 32-bit application support could likewise permit Apple to strip every one of the 32-bit code out of iOS completely.

App attempts to access privacy sensitive data

During process of uploading an app to the AppStore you might run into an issue where you will receive an email indicating that your application needs further keys inserted in your info.plist file.

The two keys that I was required to add were: NSCalendarsUsageDescription and NSBluetoothPeripheralUsageDescription. Both do require a string explaining to the user how the app uses this data. Without the two, you are trapped and your application will fail Apple’s approval each and every time.

The solution is fairly simple, open your info.plist file and add the following:

NSCalendarsUsageDescription

NSCalendarsUsageDescription
$(PRODUCT_NAME) calendars use.

NSBluetoothPeripheralUsageDescription

NSBluetoothPeripheralUsageDescription
$(PRODUCT_NAME) bluetooth use.

Resubmit your binary and your application should/will pass Apple’s quality assurance.

New Language “Swift” with a government twist?

As you probably have heard by now, Apple unveiled a “new” coined language “Swift“. Swift apparently works side by side with Objective-C. The new code presented will be interactive, fun, and above all lightning-fast. With the announcement came a 500 page iBook that was ready for download for those who wanted to learn the new language. Very exciting. Above all, the actual release received the biggest applause by the audience observing the keynote.

And now the TWIST

At the bottom of the Apple’s website there is linkage to a third party website:

Looking for the Swift parallel scripting language? Please visit http://swift-lang.org

The website was immediately down after the announcement and the following message was posted on the swift-lang.org website:

Swift Language

Here’s where it gets interesting. Upon performing a Whois on swift-lang.org following information was revealed:

swift-lang.org whois

Hmmm? Whats this:

mcs.ani.gov

When you go to the website it will take you to Mathematics and Computer Science (Argonne National Laboratory). If you scroll all the way to the bottom you will see this fine logo: (US Department of Energy):

US Department of Energy

Now if you go to search and type in: Swift, you will get the following:

Swift

And here we see the name of the person who registered the domain name originally. And it appears the program is part of University of Chicago.

Its just interesting to see the “connections”. You can draw up your own conclusion.

Regardless, I’m truly excited in seeing Swift at work.

Google Hangout for iOS

If you have updated to the latest version of Google Hangout, you will notice that there is a call option now. And yes it actually works for Canadians (for now). The call quality is superb, and it essentially uses Google Voice technology without all the extra options that you get with Google Voice. Its a start for us Canadians who have been deprived and have not had a chance to legally obtain Google Voice account.

If you are a Canadian, grab the 1.3.0 version and don’t update it. I assume they will disable this for Canadians in the next update. Enjoy free phone calls to Canada and United States.

Direct Link (AppStore)

Retrieving deleted images/photos on iOS device ISSUE

With an iOS device (such as: iPhone 5, iPhone 4S, iPhone 4, iPad Retina, iPad 2, iPad Mini) I haven’t had issues retrieving Contacts, Calendars, Messages, Message attachments, call history, notes, voice memos, and bookmarks. However, photos is a different story. If a photo has been deleted from an iOS device and then further photos are taken, the photo appears to be gone forever. I could be wrong, but thus far I don’t see a temporary flash storage for the photos. Even though the photo is skipped in the naming process (ie. img_1001.JPG, img_1003.JPG), its permanently overwritten by the following photo that is taken by the device. I have tried every data retrieving technique used on flash drives, and the data is just not there.

Drop a comment if you have figured out a technique to retrieve deleted photos from an iOS device.