Re: Symbol not found: _OBJC_CLASS_$_NSObject
Re: Symbol not found: _OBJC_CLASS_$_NSObject
- Subject: Re: Symbol not found: _OBJC_CLASS_$_NSObject
- From: Kyle Sluder <email@hidden>
- Date: Wed, 30 Jan 2013 17:10:31 -0800
On Wed, Jan 30, 2013, at 04:41 PM, Quincey Morris wrote:
> Where are your private frameworks coming from?
>
> In Todd's case, the frameworks were built separately (AFAICT) and merely
> made available to the main project for linking. In my case, the
> frameworks were built by a second project in a workspace that contained
> the app project. Perhaps in your case the frameworks are built by an
> additional target in a single project? Maybe that's the different factor.
Our frameworks all have their own projects in the same workspace.
> It would be great to know why Xcode likes you better.
It turns out it doesn't like me better. It also turns out mdfind is
broken and cannot find the string "frameworks" in the shell script our
build system invokes that contains the line:
`frameworks=(*.framework(N))`.
So, I'm sorry to give you all false hope. We do have a custom script
that enumerates all the frameworks in the built products directory and
moves them into the app.
But I can indeed offer some helpful information: when you add a target
to Xcode, it creates a proxy icon for that target's product in the
Products group of the sidebar. This proxy icon is special! Whenever you
want to refer to this build product, you want to drag this guy around
rather than using the Add Files sheet. Using Add Files will create a
standard file reference, which can confuse the Xcode build system and
indexer causing lovely UX oddities like putting your build products into
the Open Quickly dialog.
Using the plus button on the Link with Libraries phase also creates the
correct type of proxy object.
You can actually see the difference if you crack open the pbxproj:
PBXReferenceProxy entries refer to objects from other xcodeprojs which
Xcode can resolve when both projects are contained within a workspace.
If you use the Add Files command, you're creating PBXFileReference
entries which contain a relative on-disk path.
If you share your xcodeprojs with others, this distinction becomes very
important, because Xcode will wonder why it can't resolve the file
reference to
"/SomePathNotOnYourSystem/../../../../PrivateFramework.framework", while
you scream and point at the project immediately above it that builds
that product.
Long story short: use the plus button and/or the auto-generated proxy
icons in the Products group, not Add Files, to add references to build
products!
--Kyle Sluder
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden