Where to install shared libraries on OSX 10.11? - macos

Since OSX 10.11 it is forbidden to put stuff into /usr/lib, so I redirected everything to /usr/local/lib, which is afaik THE folder to install user libraries to. But /usr/local usually doesn't exist, so the installer creates it. It seems working fine, I checked only on 10.11 beta though, but others say it is fine.
But now I ran into a customer, who used official upgrade to 10.11 (not beta) and the system forbids him to create /usr/local directory, he even tried manually...
Any ideas what the hell is this about?

Basically Apple tightened the security of OS X to prevent apps manipulating with system files.
Watch this Apple presentation to get answer and suggestions on what to do going forward.
Apple's App Transport Security presentation

Related

How to install XCode 9 GM on MacOS Sierra 10.12?

I actually built a Hackintosh to learn programming with Xcode. It runs on my Asus X555LA laptop. I downloaded the latest Xcode 9 GM build from the Apple Site (not from App store). After extracting, when I tried to install, it shows "You can't use this version of the application "Xcode" with this version of macOS; You have macOS 10.12. The application requires macOS 10.12.6 or later".
Is there any tweak to make it run on my Sierra 10.12 itself? I can't really think about upgrading the macOS version as it's a Hackintosh. I followed this guide to install macOS on my Asus laptop.
Xcode requires latest macOS, you have no choice, you need to upgrade the macOS version on your Hackintosh. Or better: Reinstall macOS in a recommended way on your PC, if you're doing Hackintosh... :)
The guide you linked is very poor... Never use premade install images, because these have been modified in an uncertain way, and you don't want to install a premade undocumented mess to your computer. It might be packed with threats, malwares, spy tools and so on.. It's the worst thing I can imagine in security aspect to install an OS image from uncertain source.
Also, there is no universal macOS installer for PCs - even though many are trying to find a way to create it: it's a bad idea and it will never succeed because there are so many PC parts, millions of differently built computers..
The only way to create a stable fully functional Hackintosh is to know your hardware and create an installer flash drive for that specific PC. First you have to download the latest macOS Sierra from AppStore, this is the only source that you can trust, because it's downloading from Apple's servers. Then install a small program, called Clover bootloader to the flash drive to make it bootable.
This is the only full and up to date guide for PC laptops. If you have questions, register to the linked site and start a new forum thread posting your questions. They will help you but please read this guide at least 3-4 times carefully because everything is described here.

OSX Sandbox: Launch a different executable based on OS version

I have an application in the Mac App Store. I'm trying to support users going back to Snow Leopard but this is becoming increasingly difficult.
Recently I've hit a roadblock due to the iTunesLibrary.framework, this framework must be linked to the main executable and yet doing so will always trigger a crash on load when running in Snow Leopard.
To workaround this problem, I want to compile a version of my app that doesn't use features and frameworks from newer versions of OSX. The problem is, how can I launch the compatibility build automatically?
I'm considering trying to make the main executable point to a shell script, but I don't really like that idea. I've also thought of the main executable being a helper that simply launches the full app and then exits. I expect this would work, but I worry about it getting approved by Apple. Finally, I'm wondering if the app bundle format itself can support this kind of setup, maybe via an advanced used of CFBundleExecutable that I'm unaware of.
Has anyone been down this road, what would you suggest?
Try weak linking the frameworks, more information about Weak Linking and Apple Frameworks here. Then also check in your code for the OS version or - (BOOL)respondsToSelector:(SEL)aSelector of any NSObject to determine what you can call and what not.
To have Snow Leopard as Base SDK you'll need an old Xcode and will have troubles submitting to Mac App Store.

confusion of how to make osx app backward compatible & how to test them

after reading the apple SDK guide
https://developer.apple.com/library/mac/#documentation/developertools/conceptual/cross_development/Overview/overview.html
I'm still confused of how to make the mac app backward compatible & how to test them properly
I have an app, I run it and tested it on Mountain Lion 10.8 without any problem, however I want to make this app backward compatible so that other users can run it on a mac 10.6 - 10.7 machine.
I have an apple developer id and I can download the old versions of 10.7 and 10.6, but the problem is, I have a 2011 macbook air which is currently running 10.8, and that's the only apple machine that I have. Can I test the 10.7 and 10.6 by using vmware or parallels?
in my project settings, I set the target deployment to 10.6 (as I want 10.6 users to run my app), but should I set my SDK to 10.8 or 10.7? if I set the SDK to 10.8 but having the target deployment set to 10.6, if I fix all the xcode warnings will it run successfully on 10.6??
from the SDK drop down, I can only set to 10.8 or 10.7, but 10.6 is missing, how do I fix that?
thanks in advance
I develop on a 10.8 box and support back to 10.5. Just a couple of months ago we dropped 10.4 PPC support, and I'm still cleaning out some of the 10.2-specific code. This may get a little rant-y, but I've been doing old versions for a long time. I have some opinions on the matter.
No matter what Apple says in their docs, if you want to support 10.6, then build with the 10.6 SDK. Do not rely on distribution target.
I have had this discussion with the Xcode engineers, and while they hold to Apple's party line that you should always build with the latest SDK, they also acknowledge that it's generally insane to do so. If you build against the 10.8 SDK and mark your deployment target at 10.6, you will get no warnings for using methods that do not exist on 10.6. The only way you will discover that you've used a nonexistent method is that it might give you strange bugs when run on 10.6. That's insane.
Remember, OS X doesn't crash when you send an unknown selector. It just aborts the current runloop. So the bugs are even harder to track down then on iOS, where it crashes the app.
Sure, you can do weak linking. Talk about dangerous.... Yes, there are a few times this is useful, but the compiler gives you no warning if you don't do it correctly. If I'm going to do weak linking like this, I go the other way, linking against the old SDK and copying the new function's prototype into my implementation. That way I have documentation of every function I think I'm going to weak-link.
Download the old SDKs and symlink them into your Xcode distribution.
Guard them jealously. Apple will try to delete them every time you upgrade Xcode. Make your own copies and stick them in /SDKs or somewhere else away from Xcode. I provide a script called fix-xcode to manage the symlinks automatically. Am I bitter at Apple for their relentless insistance on deleting my old SDKs? Yes, I am.
You can run 10.6 Server in a VM legally. You can run 10.7+ Desktop in a VM legally. These are good ways to test your code.
Or you can do what I do and have a small pile of old MacBooks each with two or three partitions on them that you reboot all the time.
Now that 10.7 comes from App Store, it's a little harder to make VMs. My strong recommendation is to snapshot your image immediately after install, and make a clean backup copy of it. You'll want to be able to clone that image from time to time when you need to get back to a "raw" machine.
Get in the habit of squirreling away SDKs as they come out. 10.8 will be old some day. You might as well make a copy now while it's easy.
Whether you support individual dot-releases or not, it can be very helpful to keep around the upgrade packages for individual dot releases. When you encounter customers running non-current releases, it's nice to be able to check whether an "unreproducible" bug in fact is easily reproducible on their specific version. Whether this is worth it or not depends heavily on your product and customers. It was a life-saver for me when 10.4.11 made major changes to WebKit during a dot release...
Invest in a small NAS or a big external USB drive (though I've had trouble with those failing when used extensively, so I prefer a RAID). You'll need the space. You want to hold onto lots of VMs and lots of SDKs and sometimes even old versions of Xcode.
Adding to Rob Napier's great in-depth answer:
To use an old SDK, put the SDK (or a symlink) to it here:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
With XCode 7.3 or later, you need you to open this file and change "MinimumSDKVersion" (otherwise XCode will refuse to use the old SDK):
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist
You can install multiple versions of Mac OS on a single machine, booting between each.
The SDK should be the latest (10.8).
See 2.
One alternative to 1 that I've considered (I am in the same boat) is to create a Snow Leopard Hackintosh using an old PC and just installing Lion and Mountain Lion on my MBP.
You need to do these settings :
1.Set the Base SDK to Current version of Mac (ex. 10.7)
2.Set the Deployment SDK to older version (ex.1.4)

What's the standard way to set up a dev environment on a Mac?

I've just done a clean install of XCode 3.2.6 on Snow Leopard, to the default /Developer dir.
Is the right/normal way that all libs, and software tools such as CMake/git should be installed inside /Developer too? Is it comparable with how Linux expects standard dirs to be used for things, or more like Windows where it's all down to personal preference?
Any good guide for a experienced developer who's a noob to Mac dev is appreciated. For instance I'm confused where and how my SVN client came from and why I have SVN but not Git.
In general, you should not install anything inside of /Developer (not /Development). You should assume that anything under it is managed by Apple via Xcode packages. For additional command line tools and libraries, one standard Unix-y practice is to install them in /usr/local which is provided for such purposes. (Do not install anything in any other /usr locations as they are also managed by Apple.) But, rather than building and installing a lot of third-party software - like git - yourself or using binary installers from different providers which may not play well together, it is a good idea to use one of the open-source package managers for OS X. The most widely used are Homebrew, MacPorts, and Fink. Pick one and stick to it.
In Xcode 3, Apple shipped svn but not git. That changes in Xcode 4, the default on 10.7 Lion, which does include git. And, as of Xcode 4.3, there no longer is a /Developer directory as Xcode itself is now an app in /Applications and the items formerly in /Developer are included within its app bundle.

Upgrading to Mac OS Lion as Developer

I'm planning to buy Mac OS Lion, but I would like to know some informations.
- Are Snow Leopard's apps compatible with Lion?
- Are apps compiled with Xcode for Lion compatible with Snow Leopard? What if these app uses popovers/fullscreen which are features of Lion?
xCode requires a full download (the full 5*ish GB) and if you are a Java guy you will have to re download Java as it is not included (this was my experience when opening eclipse for the first time in Lion).
Some of Snow leopards apps are compatible, not all (ppc apps will not work). It is probably best to check with the software vendor first.
Another thing your Library folder disappears on an upgrade among some others where Lion is trying to 'Protect' its users. To get round this simply enter the command into terminal. (replace username with your username and foldertoreveal with the hidden foldername)
chflags nohidden /Users/Username/FolderToReveal
The upgrade process other wise has been fine. For reference I am an Obj C /C++ /C and Java developer. Hope this helps
Also will link you to this post about Developing Java on Lion:
Stack Overflow post on Java in Lion
A very good list of compatible applications is available at RoaringApps. I highly recommend checking for your favorite editors/IDEs/etc there.
Of note:
TextMate: "Works fine," but there are some issues
BBEdit: "Works fine"
iTerm2: "Works fine" (minor interface bugs)
And of course, Apple's tools require an upgrade to XCode 4.1.
As far as developing with the new APIs in Lion, you can explicitly target a specific version of OS X for compatibility. When building for 10.6, those new APIs will not be exposed during compilation and you will get warnings about unrecognized selectors if you try to use them.
So far what I've noticed :
- make sure you install XCode 4.1 (not the same as 4.0, it's a free separate download), which fixes the Python includes mess
- go to terminal and type "java", this will trigger the download of the Java runtime
But I chose to avoid the burden of fixing all libs by going with a clean install of Lion (from a USB key)
cvs stopped working for me, but downloading Xcode seemed like an unnecessarily heavyweight fix. Adding /Developer/usr/bin to my PATH fixed it for me.

Resources