You should be able to simulate Unique Civics in Python quite easily using the canDoCivic and cannotDoCivic callbacks - assuming those are available in the Mac version.
Much better than fake techs...
I still prefer a DLL solution for the PC.
You're right that it will prevent a civ from using a civic which is another civ's UC, and it will even solve the AI issue, but it doesn't create unique civics which replace default civics. It creates different civics altogether.
There are a number of problems which this will cause:
- Trade: You can switch civics as part of a trade, but you won't be able to switch to a UC (or to a default which you cannot have) as part of trade, although your rival requests (or demands) that you do.
- UN resolutions: how do you make everyone switch to Free Market when some of them can't?
- How do you handle events which are triggered only with a certain civic (slavery)? Can they not be triggered when a civ has a replacing civic for slavery? (duplicating events is an option here)
- A leader's favorite civic will only have affect on diplomacy if the rival can have this civic.
- A more of an aesthetic issue: You can't really create the effect of unique civic (a civic which actually replaces another civic) as you have with units and buildings - so it appears in the civilopedia and such.
This is what I can think of right now.
Of course for mac this is probably the best way to do it, but I'm trying for a more complete solution.