sparkle-project/Sparkle — pull request #414 by jakepetroules (2014-08-24 01:57:27+00:00)
Title: Only export public symbols.

I've set up the project to only export the symbols defined in public headers shipped with the framework. At first glance, this appears to break binary compatibility (and in theory it does). However...

All symbols not declared in public headers are considered private API. Because the headers for these symbols were never shipped with Sparkle binaries, no one could realistically be using the symbols that are no longer exported and thus we are still binary compatible with 1.6 and merely formalizing the existing public API.

If someone was using private headers, then yes, this change would break their app but there is no reason we should guarantee binary compatibility for private API just as Apple, Microsoft, or any other large software project also doesn't.

So... I think this change is OK for master. Discuss?

Current list of exported symbols:

$ nm -g Sparkle.framework/Versions/A/Sparkle | grep ' [ST] '
00000000000508c0 S _OBJC_CLASS_$_SUAppcast
00000000000508e8 S _OBJC_CLASS_$_SUAppcastItem
0000000000050d98 S _OBJC_CLASS_$_SUStandardVersionComparator
0000000000051018 S _OBJC_CLASS_$_SUUpdater
0000000000050898 S _OBJC_METACLASS_$_SUAppcast
0000000000050910 S _OBJC_METACLASS_$_SUAppcastItem
0000000000050dc0 S _OBJC_METACLASS_$_SUStandardVersionComparator
0000000000051040 S _OBJC_METACLASS_$_SUUpdater
0000000000045bb0 S _SUUpdaterAppcastItemNotificationKey
0000000000045bb8 S _SUUpdaterAppcastNotificationKey
0000000000045b98 S _SUUpdaterDidFindValidUpdateNotification
0000000000045b90 S _SUUpdaterDidFinishLoadingAppCastNotification
0000000000045ba0 S _SUUpdaterDidNotFindUpdateNotification
0000000000045ba8 S _SUUpdaterWillRestartNotification
000000000003455b T _objc_retainedObject
0000000000034564 T _objc_unretainedObject
000000000003456d T _objc_unretainedPointer

PS - protocols don't export any symbols, so no need to mark them.