two projects in xcode4 workspaces (#import failure

2020-06-12 02:58发布

问题:

I'm really struggling to get this to work in xcode 4.

I have one project that I will reuse in many applications (networking) so I create a workspace and add my two projects. So far so good.... This is where it fails..

#import "JSONRequest.h"

For no apparent reason. It auto completes the file name of the header file. I thought this had something to do with the "scheme" (also new in xcode 4) so I've tried to add my networking target in the build phase. Changing order of them... set "Shared" under Manage schemes.. I've tried so many different combinations of the settings without any success.. And the error message is get is:

JSONRequest.h: No such file or directory

If you have a clue, please let me know.

回答1:

You can add the header or source folder of your project you're referencing to your Header Search Paths.

  1. Click on the target that's importing JSONRequest.h.
  2. Click on Build Settings.
  3. Enter "Header Search Paths" into the search box.
  4. Double click on the value cell.
  5. Click the + sign.
  6. Set the path to the project you're referring. Let's say it's called JSONlib. The path is relative to the root of the referring project (the project that's using JSONlib). For example: ../JSONlib/src/headers/ or wherever it is that the .h file lives.
  7. Click done.
  8. Clean and then build.

You'll find more info about this problem in the apple developer forums. Best of luck.



回答2:

What are you really trying to do?

If you have an entire Xcode project you intend to share between different products that usually suggests your project builds one or more targets (such as a framework, etc.). Therefore, your "shared" project should be able to build the framework on its own, irrespective of the workspace it's contained in, right?

Let's assume it's a framework. In most cases, Xcode can figure out the dependency by simply adding the framework product to the Link build phase of the (assumed) app using the framework. Done. Xcode should know to build the framework project's target first, since it's linked against when building the app project's target.

So your problem is likely just a matter of knowing where Xcode is looking to find files. Since projects within workspaces share that workspace's build folder, they can all "see" each other. But in the case of a framework, A simple import by file name won't cut it. You'd need:

#import <MyNetworkingFramework/MyNetworkingFramework.h>

Since you're including a specific header (JSONRequest.h) (which must be one of the public headers in the framework target's copy headers build phase), you'd need:

#import <MyNetworkingFramework/JSONRequest.h>

If your "shared" project is not a framework, you'll need to amend your question to include a more thorough description of your two projects and their targets.



回答3:

This worked for me,

In build settings --> Header Search Path --> Add below entry

$(SRCROOT) and mark it as recursive.

If above not worked you can also try following way,

<path-of-other-project> and mark it as recursive.

Hope this helps to you ! (You may require to clean or restart the workspace)