Is an updated Mac app required to support 10.4, and can I support 10.4 and prepare for 64-bit?

My company is currently rewriting our software from scratch, and I'm the one who's going to do most of the work of rewriting the Mac client (the core of our software is Windows based, and the Mac client communicates with it through a web service).

It is not very heavy application, mainly some background work tracking stuff and UI for user input.

I am trying to decide how much I should argue about dropping 10.4 support and moving with pure 10.5 + / Obj-C 2.0 code.

My main motives for this:

  • It would be easier to code, I could use all Obj-C 2.0 features like synthesized properties and swift enumeration.

  • This would give me access to several classes and methods in existing classes that don't exist in 10.4 (just in UI mockery, I came across NSPathControl and NSTreeNode, both of which I would otherwise be very happy to use.

  • Preparing to convert to 64-bit Snow Leopard. It looks like most of the methods to prepare for the move to 64 bit (NSInteger, etc.) are only available in 10.5+ and it will be impossible to use them when writing to 10.4.

The downside, of course, would be that we will no longer support an operating system that has only been outdated for a year.

My boss himself supports this move, but of course our clients are considering and don't want to cause more problems for them than is justified. The Support Director would like to support 10.4. I suspect that other executives will be slightly opposed to this at first, simply because they cannot support some clients. Everyone would be open to persuasion with good arguments on both sides.

I'm trying to talk to some of the support people and get an idea of ​​how many of our customers are actually still using 10.4, but I have no data yet.

Some hybrid solution might be possible, such as rewriting parts of an old client to use a new web service, or recording a client at 10.5 and pushing it back to 10.4 if enough people had a falling out, but frankly, that sounds like them. there will probably be more problems than dropping 10.5 functions and writing code in 10.4 to start with.

So, I guess my questions are:

  • With the above information, what do you think is the right decision to make for adopting 10.5+? Do you have any suggestions on how this can be reflected positively for the rest of the company?

  • I don't know as much about the upcoming 64-bit transition as I would like. Does anyone have any good references on what will be different and do you think only 10.5+ support will make this transition easier for us?

+1


source to share


4 answers


If I were doing an update, I would be targeting 10.5, especially since 10.6 is just around the corner, and 10.5 has a lot of great new things (especially Objective-c 2.0). However, I think you really need to answer this question based on what you think your target customer group will use. If they are slow to implement new technologies, you may need to support 10.4 or risk losing some of your customer base.

Alternatively, you can target 10.4 and write with the 10.5 SDK. So you can take advantage of all the 64-bit preparations added to the SDK. You just need to make sure you don't use framework classes or functions that weren't there in 10.4. You can also make loose coupling with 10.5 frameworks and decide programmatically whether you can use the new feature or not (while this is a bit extra work, you can easily do phase 10.4 from your code in the future and fully take advantage of the 10.5 improvements for users who actually run 10.5).



There are many blogs and reviews out there on how to do cross platform things online. Another thing to keep in mind is that if you are targeting 10.4, make sure you have a 10.4 machine to do a lot of testing (especially if you compile from the 10.5 SDK to take advantage of 64-bit features). Also check the docs for any feature you can use from the 10.5 SDK. Many features were actually available in 10.4 but are undocumented, and new documentation usually indicates which features are safe to use when deployed prior to 10.4

+3


source


Need 64-bit? If your application is not very CPU intensive, it won't make any difference.

Tiger can run 64-bit applications, but no GUI. If you want a 64-bit version, you can create a 64-bit CLI executable that does the heavy lifting and provides a 32-bit font for it (using NSTask

and NSPipe

).



You can also have separate files .nib

for Leopard and Tiger:

-(id)init
{
  BOOL tiger = floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_4; 
  NSString nibname = (tiger ? @"WindowTiger" : @"WindowLeopard");
  if (self = [super initWithWindowNibName:nibname]) 

      

+1


source


You really need to figure out what your customers are using, and perhaps the support person is best placed to find out, or the product manager. However, there is nothing wrong with making the technical arguments clear, even if 90% + of your user base was pre-Leopard; this way the problems will be known (and hopefully understood), so you will have more support as your environment changes.

+1


source


I've never written production code in Objective-C and it was difficult to maintain, but as far as I know NSInteger and friends are in 10.4, it's just that Cocoa is not 64 bits in 10.4, whereas 10.5 is the most (so no more for a separate 64-bit workflow under a 32-bit interface).

I don't know what your product is, or who your customers are, but in my experience, Mac users are early adopters (relatively speaking) I never used OS X for more than two weeks before the next update, and my circle I am a late adoptive parent. Of course, I'm not just a business Mac user and that can make a big difference.

What causes 64 bits in your code? There aren't many reasons not to compile a generic binary containing as many architectures as possible, as you would like a single binary run on G4, G5, IA32 and IA64 not to cause problems, and should it be native to all of them ... If you're just doing 64-bit because you have no reason (I can imagine) not to support 32-bit support, but if you want things like CoreAnimation you have no choice.

I don't find it wrong to require 10.5 for a new development, but it doesn't make much business sense to get a whole new OS for customers to just keep using your existing product. So if you can, stay compatible, maybe delay your new features / patches for a while. There is a good reason for branching out in version control, and it might be.

change -

Since I posted this, I found out that I was wrong and NSInteger did not exist until 10.5. I think I've used similar types too often (like NSDecimal).

0


source







All Articles