Is There A Definitive Source for When Xcode Versions are No Longer Supported by Apple? - xcode

I'm writing up a slideshow on keeping Xcode versions up to date.
It's not difficult to find out when Xcode versions BEGIN support, but not when Apple officially ENDS support.
Maybe the correct answer is "when the next version comes out," but the Xcode version tends to continue working for quite some time after the next variant comes out, and I know some folks that insist on using the old variant until the wheels fall off.
Eventually, the old version will no longer work on the current OS, and we need to hold back the OS to continue running the Xcode variant.
I need to find that point. I call it "The eBay Threshold." That's when we can no longer run the defined variant of Xcode on a new Mac, and need to buy old used Macs to run it.
As you might guess, this is a point of frustration for me. I hates ISO9001, as practiced by some outfits...
Thanks!

As you note, Apple stops supporting a version when the next version comes out. "When will it stop working" cannot have a definitive source because there is no firm definition of "working" in the absence of regression testing, and Apple does not regression test old versions of Xcode against new OS X releases.
The requirements are of course contradictory (which I expect you know). It makes some sense to demand near-total reproducibility. In that case, you must never upgrade the OS beyond the point release that existed when the next version of Xcode came out. Upgrading the OS beyond that means running Xcode in an untested mode, using "well, it seems to run" as your only criteria. At the very least, you would need to regression test your own software.
Obviously VMs are the best way to achieve this for a build infrastructure. The VMs need to be very carefully protected from outside traffic since they cannot receive even security updates without breaking their reproducibility.
Of course few develop Mac software this way. (This answer only makes sense for Mac development, and even then assumes that you are not submitting to the App Store. MAS and iOS development must keep up with the latest version of Xcode by Apple policy.)

Related

Xamarin UI test alternative

I started using Xamarin.UITest for cross-platform testing (IOS & Android).
With Android it worked instantly without any problem and it keeps forking even after any SDK update or JDK.. name it!
But for iOS there was so many issue encountered with the device agent that didn't want to start, the wrong Xcode commande one, the wrong Xcode. Some time it worked, but out of no where it crashes.. then you must clean, rebuild, retry, cross your fingers it doesn't crash or at least that it will launch..
But now April 19 2019, I had an iOS update, combine with an Xcode update and sadly, it doesn't work anymore. I made a lot of research and attempt to recover my test case:
Downgrade Xcode to 10.1
Downgrade Xcode commande line tool to 10.1
downgraded the OS!
To finally rethink it. It's not a good solid testing tool if it breaks at every updates.
On the AppCenter it still works for both platform. But to create your test, you have to run them locally.. You can't anymore with iOS and if you find how to make it work, let me tell you : "See you for the next update!"
So the question is:
What are the alternative to do some automated UI test for iOS & Android using Xamarin?
Xamarin.UITest Xcode 10.2 support
Sorry to hear about your difficulty with the Xcode update.
Unfortunately Xcode minor updates for the last several releases have tended to break local iOS simulator testing, and occasionally device testing. I've seen this be an issue since at least as early as Xcode 9.x versions.
For context, Xcode 10.2 support was added in this package: https://www.nuget.org/packages/Xamarin.UITest/2.2.7.2002-dev
If you or future readers of this discussion still do end up using Xamarin.UITest, I recommend checking the release notes when new minor versions of Xcode come out to see if that support has been confirmed. Typically the support has been added in the 1st Xamarin.UITest package released after a new minor version of Xcode has been released.
(I generally haven't seen this issue with patch versions though, for example Xcode 10.2.1 didn't seem to cause any issues when it came out if it was run against a test suite that was working for Xcode 10.2)
Other testing frameworks
As for other testing frameworks, if you're using App Center itself; then Appium (JUnit) or Calabash are both able to be used with App Center Test and can be used cross-platform to run against your IPA/APK, generally regardless of what was used to write the apps in the first place, like Xamarin.UITest. (Though each framework has slightly different set up requirements and limitations.)
Outside of App Center Test, there may be other testing frameworks you can use; but that gets more into individual developer opinion which strictly speaking is out-of-scope for Stack Overflow answers.
Appium Studio which holds all the pros of native Appium. It also supports parallel execution with built-in test reporting mechanism. They also provide cloud devices with which you can check whether it is feasible for your project. Check out their documentation for more features.

Mac system application extension

I'm trying to modify the functionality of mission control which belongs to dock.app and I'm wondering what the preferred method of doing so would be. I've looked into using the simpler method of defaults but that won't give me enough control. I'm curious if people use something like Application Enhancer by Unsanity to execute custom code for these purposes.
Application Enhancer is effectively a dead project at this point -- while the current version does advertise support for Lion, Mountain Lion is slated for release within the next month, and it is unlikely that they will ever support it (as neither the Unsanity site nor their Twitter account has not been updated at all since last November). I would recommend strongly against using it for new products.
Under previous releases of OS X, SIMBL and PlugSuit have been popular, but neither one is available on Lion. The options seem to be more limited now; however, Rentzch's mach_star (mach_override / mach_inject) code seems to still be working.

Xcode 4 & Mac OSX 10.3?

I'm new at programming on the Mac. I've got me a brand new copy of XCode 4.0. I've got people asking me what versions of MacOSX we'll be able to support but I'm not sure what to tell them.
I see options for selecting an "SDK" and other options for selecting a target version. It seems the lowest I can go is 10.4 though -- even though we'd like to support 10.3, if possible without a lot of pain.
My question is, could anyone give me a quick rundown of how sdk versions and target versions fit into this? As I'm coding, what kind of things do I need to watch out for to make sure I can still support the smallest version of MacOSX? Likewise, how do I figure the G4/G5 (PowerPC) versions of MacOSX into all this? For example, on Windows, if I write an app in c#, I know that all I need to do is make sure an appropriate version of .net framework is installed, regardless of the OS. Does something similar hold true for the MacOSX?
Thanks in advance.
I believe Apple has dropped PowerPC support completely, including Rosetta, in Mac OS X so 10.3 is out of the question.
If you want to support PowerPC, see this related question. It looks like a lot of work.
How can we restore ppc/ppc64 as well as full 10.4/10.5 SDK support to Xcode 4?
With the analogy to the .NET Framework, there isn't anything like that for Mac OS X built-in.
It is true for Mac OS X. If your program targets 10.3 SDK, it will be able to run on 10.3 or greater. I.e. the Base SDK project setting specifies minimum target OS version.
However, supporting 10.3 IS a lot of pain. Even 10.4 is not that easy, for example Objective-C 2.0 (most important, #property, garbage collection) is only available with 10.5 SDK or above.
The common solution in existing projects is to keep an old version of software available for 10.1-10.4 users, while the new versions will require 10.5 or greater (and also usually are Intel-only).
If you're starting a new project, you will probably want to distribute it via Mac AppStore, which only works on 10.6+, which means you can safely pick 10.6 SDK as the lowest target version.
Apple is way more harsh about upgrades than Microsoft. Mac users don't walk around with 10-years old systems on their laptops. The only reasons I can think of to still use 10.3 are using 10-year old mac, not having Internet connection and not knowing what “to update a software” means. So, I wouldn't care even about 10.4, not to say 10.3.

Bundling a private JRE on Mac OS X

Starting with the next version of Mac OS X, Java will no longer be included in the system and I don't want to force my customers to install it themselves. So I would like to do what I do on Windows - bundle it with my app. It also gives me some hope that it could get included in the Mac App Store.
Where can I download a Mac OS X JRE that I could include with my application? Or can I just copy the one that's installed on my Mac?
Update (4/15/2013):
As Thorbjørn helpfully pointed out, Oracle now has a solution for this. See http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html. However, I'm keeping the original content for "historical purposes", and because it was a fun research project.
Previous version (with edits):
This is a great question. I was going to respond that you are simply ahead of your time -- as you pointed out, Java is not going to be removed until the Lion release. However, this article makes it clear that using Java today is not allowed:
Apps that use deprecated or optionally installed technologies (e.g., Java, [PowerPC code requiring] Rosetta) will be rejected.
At the same time, no one has announced a redistributable JRE for Mac OS X yet. I think your best bet, bearing in mind that you are forging new ground, is to check out the Mac OS X Port wiki page of the OpenJDK project. It does describe how to compile your own JDK, but it does not clearly state whether or not the resulting JDK can be "bundled" cleanly or not. I think you will have to try it and see :-(.
Also, it's not clear if the OpenJDK licensing allows this at all (IANAL). Hopefully someone else has already figured this out with regard to Linux/Windows, although of course the rules may be different for the Apple contributions.
Hope this helps. If nothing else, it's a starting point.
EDIT: I am going to throw out one additional suggestion. We now know that Mono apps can be packaged for the App Store. Furthermore, IKVM.NET is a complete implementation of Java that runs on top of Mono. You could try, in theory, to put these two pieces together and get a Java app, bundled for the App Store, that does not in fact require a JRE!
If you try this, I would love to hear how it works out :-).
EDIT 2: Unfortunately, the App Store and the GPL do not appear to be compatible (see http://www.zdnet.com/blog/open-source/no-gpl-apps-for-apples-app-store/8046). The OpenJDK license isn't exactly the same as the GPL, but it's pretty close (again, IANAL). Therefore, Mono & IKVM.NET may be your best bet. Good luck!
In the same web search that I found this question, I've found the these instructions from the OpenJDK project. Not having tried them myself, I cannot comment on how well they work.
Meanwhile, another, very detailled article was published by Marco Dinacci which also goes into signing and sandboxing.
Apple has joined the Sun/Oracle OpenJDK open source project last month, so Java on Apple is alive and kicking.
Just tell the user to download and install the OpenJDK JRE for Mac OSX (when it becomes available, right now it´s just source code).
And no. you cannot include "the folder that is in your mac" without permission as it is copyrighted code from Apple.
Finally, packaging a "private JRE" is a very bad practice, it will make your app bloated, andif the user ends up running several Java apps, he will end up running multiple Java VMs simultaneously which is a terrible waste of system resources.

Mac OS X Tiger vs Leopard usage pervasiveness - any study?

I need to decide whether I should support Mac OS X 10.4 / Tiger, and the decision likely hinges on what percentage of mac users are still running Tiger. I didn't find anything too reliable on the interwebs nor on Apple's developer website. Let's ignore the impending Snow Leopard release and it's impact on Mac OS version usage distribution.
Does anyone know of a study that might provide insight? Any other suggestions on how to figure this out? If you quote any numbers/percentages please include a pointer to the source.
Take a look at the Sparkle+ stats, that the Adium project is collecting.
The stats are available here.
OmniGroup keeps track of the system configurations that use their software updater. The current split is roughly 60/40 in Leopard's favor.
Keep in mind that, judging from previous releases, Apple will likely drop official support of Tiger once Snow Leopard is released, which should be any day now.
It really depends on what user audience your software has (whether they're likely to upgrade or not). I don't have a study, but considering how each major update costs money, I'm sure there are many non-power users who are still on older editions.
You're better off targeting Leopard only, especially with Snow Leopard coming out at the end of the week with a lot of changes to key technologies. Apple moves pretty quickly and soon enough supporting Leopard will be your legacy support.
From the Adium Sparkle+ stats that weichsel linked to:
10.3 : 2170 ( 1.3%)
10.4 : 28645 (16.3%)
10.5 or above: 134269 (82.4%)

Resources