Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ModuleMap: How can I set a relative path for the umbrella header?

I am working with the Swift Package Manager. I have a project which I can successfully build via "swift build". I have created an Xcode project via "swift package generate-xcodeproj". When I open the project in Xcode it builds successfully.

The Xcode project includes two modules A and B.

Module A has the following map:

module ModuleA {
    umbrella header "/Users/Robert/Temp/MyProject/Sources/ModuleA/include/ModuleA.h"
    link "ModuleA"
    export *
}

Module B depends upon A and has the following import:

import ModuleA

So far so good; everything builds successfully. Now I want to change the module map so that it uses a relative path, such as:

module ModuleA {
    umbrella header "ModuleA.h"
    link "ModuleA"
    export *
}

However, when I do that I cannot get Module B to build: Error - Umbrella header 'ModuleA.h' not found. I have tried everything that I can think of in Build Settings -> Search Paths -> Header Search Paths and User Header Search Paths. I've found similar issues online, here and elsewhere, and have tried what I read but so far no go.

This has reached the hair pulling stage. Any advice will be much appreciated!

like image 704
Verticon Avatar asked Feb 01 '17 18:02

Verticon


1 Answers

My guess is you're modifying the generated modulemap. Create a modulemap file at /Users/Robert/Temp/MyProject/Sources/ModuleA/include/module.modulemap containing:

module ModuleA {
    umbrella header "ModuleA.h"
    link "ModuleA"
    export *
}

Run $ swift package clean to remove the old generated modulemap in .build directory and $ swift build to confirm that the custom modulemap works. Then delete the generated Xcode project and re-generate it.

like image 94
Ankit Agarwal Avatar answered Sep 20 '22 02:09

Ankit Agarwal