New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to use other configurations than Debug and Release on 0.40 #11813

Closed
compojoom opened this Issue Jan 10, 2017 · 55 comments

Comments

Projects
None yet
@compojoom
Contributor

compojoom commented Jan 10, 2017

Description

in XCode we can duplicate the default build Configurations by navigating to our Project -> info tab -> click on the plus symbol and duplicate any of the existing configs (debug, Release). Set a new name. Now when edit our scheme and tell XCode to use our new config the build process won't finish. Most probably you'll end up with this error:

fatal error: 'React/RCTBundleURLProvider.h' file not found

After staring at the screen for a day I think that the issue is that the build script is copying the React files to either debug-iphoneos or release-iphoneos instead of using the "newconfig"-iphoneos directory.

REPROPDUCTION

Steps to reproduce:

  1. create a new RN project:
react-native init test
  1. Now open the project in XCode, click on your project in the folder tree. Then select the project -> your project and navigate to the Info tab. Duplicate one of the configurations and give it whatever name you like.

  2. Edit your current scheme and select the new configuration in the "build configuration" option. Now run the project. It should fail.

  3. You can repeat the same steps on RN 0.39 and it works...

Here a few screenshots of the proper screens in XCode:

image

image

And on this screen you can see that RTCBundleURLProvider.h is being copied, but to the wrong path
image

Solution

Don't have one yet, most probably the issue happens somewhere in runIOS.js

Additional Information

  • React Native version: 0.40
  • Platform: iOS
  • Operating System: MacOS
@duranmla

This comment has been minimized.

Show comment
Hide comment
@duranmla

duranmla Jan 12, 2017

I think what you are looking for is something like:

productFlavors {
        development {
            applicationId "io.app"
            versionName "${appVersionName}-development"
        }
        staging {
            applicationId "io.app"
            versionName "${appVersionName}-staging"
        }
        production {
            applicationId "io.app"
            versionName "${appVersionName}"
        }
    }

check this out: 46422dd

duranmla commented Jan 12, 2017

I think what you are looking for is something like:

productFlavors {
        development {
            applicationId "io.app"
            versionName "${appVersionName}-development"
        }
        staging {
            applicationId "io.app"
            versionName "${appVersionName}-staging"
        }
        production {
            applicationId "io.app"
            versionName "${appVersionName}"
        }
    }

check this out: 46422dd

@K-Leon

This comment has been minimized.

Show comment
Hide comment
@K-Leon

K-Leon Jan 15, 2017

Contributor

Same Issue for me - could you find a solution @compojoom ?

@javache I think you worked on the compilation stuff. Is there an easy way to get a Staging Target up?

Thank you very much!

Contributor

K-Leon commented Jan 15, 2017

Same Issue for me - could you find a solution @compojoom ?

@javache I think you worked on the compilation stuff. Is there an easy way to get a Staging Target up?

Thank you very much!

@K-Leon

This comment has been minimized.

Show comment
Hide comment
@K-Leon

K-Leon Jan 15, 2017

Contributor

Just figured it out: You need to copy the Release Target in 'React' Project too with the same Name as the parent Target has. Now we need an idea how to make it less troublesome ( without touching React) or we just document it somewhere?

Contributor

K-Leon commented Jan 15, 2017

Just figured it out: You need to copy the Release Target in 'React' Project too with the same Name as the parent Target has. Now we need an idea how to make it less troublesome ( without touching React) or we just document it somewhere?

@christianbach

This comment has been minimized.

Show comment
Hide comment
@christianbach

christianbach Jan 16, 2017

@K-Leon We have had the same issue with our Staging build configuration. Adding Staging as a configuration to the React.xcodeproj sorted our 0.40.0 build issues. Release and Debug worked out of the box.
react-staging

christianbach commented Jan 16, 2017

@K-Leon We have had the same issue with our Staging build configuration. Adding Staging as a configuration to the React.xcodeproj sorted our 0.40.0 build issues. Release and Debug worked out of the box.
react-staging

@LeoNatan

This comment has been minimized.

Show comment
Hide comment
@LeoNatan

LeoNatan Jan 17, 2017

Contributor

This is a bug/feature of Xcode. It attempts to build sub-projects using the same configuration as the main project. If that configuration does not exist, Xcode uses the Release configuration. With the latest changes to public headers exposed by React.xcodeproj, these headers now go to the build path of the sub-project, which is configuration-dependent.

Contributor

LeoNatan commented Jan 17, 2017

This is a bug/feature of Xcode. It attempts to build sub-projects using the same configuration as the main project. If that configuration does not exist, Xcode uses the Release configuration. With the latest changes to public headers exposed by React.xcodeproj, these headers now go to the build path of the sub-project, which is configuration-dependent.

@tisho

This comment has been minimized.

Show comment
Hide comment
@tisho

tisho Jan 17, 2017

Contributor

While adding a configuration with the same name works, it's not the most CI-friendly or future-proof solution. This is what I did, instead:

  1. Added the React build target under the current scheme for my project. (Sidenote: if you're using fastlane to deploy, keep your project's build target in first place, otherwise fastlane gets confused and thinks you're building a library, so it never builds an ipa).

  2. Added React under [Target] > Build Phases > Target Dependencies, which made Xcode build React before building the rest of the project.

  3. Under [Target] > Build Settings, added a new User-Defined setting, called REACT_HEADERS_PATH. For all configurations not named Debug or Release, I set that to $(BUILD_DIR)/Release-$(PLATFORM_NAME)/include.

  4. Under [Target] > Build Settings > Header Search Paths I added $(REACT_HEADERS_PATH) as an entry.

  5. Repeat for all targets in your project.

When my project builds, React builds first, and since it doesn't know about configurations other than Release and Debug, it builds with the Release configuration. This places its headers under [build dir]/Products/Release-iphoneos/include. Since this path is now in the Header Search Paths of the main project, it gets picked up and everything else builds fine.

Hope this helps.

Updated 4/13 to mention repeating these steps for all targets (thanks @Twinski) and to change to the much shorter and more reliable $(BUILD_DIR) (thanks @hoolymama).

Contributor

tisho commented Jan 17, 2017

While adding a configuration with the same name works, it's not the most CI-friendly or future-proof solution. This is what I did, instead:

  1. Added the React build target under the current scheme for my project. (Sidenote: if you're using fastlane to deploy, keep your project's build target in first place, otherwise fastlane gets confused and thinks you're building a library, so it never builds an ipa).

  2. Added React under [Target] > Build Phases > Target Dependencies, which made Xcode build React before building the rest of the project.

  3. Under [Target] > Build Settings, added a new User-Defined setting, called REACT_HEADERS_PATH. For all configurations not named Debug or Release, I set that to $(BUILD_DIR)/Release-$(PLATFORM_NAME)/include.

  4. Under [Target] > Build Settings > Header Search Paths I added $(REACT_HEADERS_PATH) as an entry.

  5. Repeat for all targets in your project.

When my project builds, React builds first, and since it doesn't know about configurations other than Release and Debug, it builds with the Release configuration. This places its headers under [build dir]/Products/Release-iphoneos/include. Since this path is now in the Header Search Paths of the main project, it gets picked up and everything else builds fine.

Hope this helps.

Updated 4/13 to mention repeating these steps for all targets (thanks @Twinski) and to change to the much shorter and more reliable $(BUILD_DIR) (thanks @hoolymama).

@hoolymama

This comment has been minimized.

Show comment
Hide comment
@hoolymama

hoolymama Jan 18, 2017

@tisho your solution worked for me. Cheers!
I had to use
$(BUILD_DIR)/Release-$(PLATFORM_NAME)/include
not
BUILD_PRODUCTS_DIR

hoolymama commented Jan 18, 2017

@tisho your solution worked for me. Cheers!
I had to use
$(BUILD_DIR)/Release-$(PLATFORM_NAME)/include
not
BUILD_PRODUCTS_DIR

@tisho

This comment has been minimized.

Show comment
Hide comment
@tisho

tisho Jan 18, 2017

Contributor

Good catch. It was actually supposed to say BUILT_PRODUCTS_DIR, not BUILD_PRODUCTS_DIR. I edited the original post to correct that.

Contributor

tisho commented Jan 18, 2017

Good catch. It was actually supposed to say BUILT_PRODUCTS_DIR, not BUILD_PRODUCTS_DIR. I edited the original post to correct that.

@hoolymama

This comment has been minimized.

Show comment
Hide comment
@hoolymama

hoolymama Jan 18, 2017

I can't quite make it work with $(BUILT_PRODUCTS_DIR)/Release-$(PLATFORM_NAME)/include
For me it resolves to build/Staging-iphoneos/Release-iphoneos/include
Its probably something with my configuration - I'll experiment a bit later, but for now BUILD_DIR is working okay. Cheers!

hoolymama commented Jan 18, 2017

I can't quite make it work with $(BUILT_PRODUCTS_DIR)/Release-$(PLATFORM_NAME)/include
For me it resolves to build/Staging-iphoneos/Release-iphoneos/include
Its probably something with my configuration - I'll experiment a bit later, but for now BUILD_DIR is working okay. Cheers!

@thekevinbrown

This comment has been minimized.

Show comment
Hide comment
@thekevinbrown

thekevinbrown Jan 25, 2017

Contributor

I built a package that should help with automatically setting all of the build configurations up in your libraries on each subsequent install:

https://www.npmjs.com/package/react-native-schemes-manager

Please give it a try and let me know how it works for you. We've got ~20 native libs now in most of our RN projects, so manually managing this would have been a nightmare.

Contributor

thekevinbrown commented Jan 25, 2017

I built a package that should help with automatically setting all of the build configurations up in your libraries on each subsequent install:

https://www.npmjs.com/package/react-native-schemes-manager

Please give it a try and let me know how it works for you. We've got ~20 native libs now in most of our RN projects, so manually managing this would have been a nightmare.

@haleykoike

This comment has been minimized.

Show comment
Hide comment
@haleykoike

haleykoike Jan 26, 2017

@tisho solution worked for me too. I also had to follow the same steps to my app's Test target in addition to the main app target

haleykoike commented Jan 26, 2017

@tisho solution worked for me too. I also had to follow the same steps to my app's Test target in addition to the main app target

sergey-akhalkov added a commit to sergey-akhalkov/react-native-code-push that referenced this issue Feb 6, 2017

readme: improved “Multi-Deployment Testing” chapter for iOS
After RN 0.40 it is not possible to use other configurations than Debug and Release (facebook/react-native#11813)
As workaround we could make Staging’s Build Products Path value the same as for Release configuration.

Fix Microsoft#688

sergey-akhalkov added a commit to sergey-akhalkov/react-native-code-push that referenced this issue Feb 9, 2017

readme: improved “Multi-Deployment Testing” chapter for iOS
After RN 0.40 it is not possible to use other configurations than Debug and Release (facebook/react-native#11813)
As workaround we could make Staging’s Build Products Path value the same as for Release configuration.

Fix Microsoft#688

sergey-akhalkov added a commit to Microsoft/react-native-code-push that referenced this issue Feb 9, 2017

readme: improved “Multi-Deployment Testing” chapter for iOS (#690)
After RN 0.40 it is not possible to use other configurations than Debug and Release (facebook/react-native#11813)
As workaround we could make Staging’s Build Products Path value the same as for Release configuration.

Fix #688
@freakinruben

This comment has been minimized.

Show comment
Hide comment
@freakinruben

freakinruben Feb 10, 2017

@tisho you deserve a medal for this!

freakinruben commented Feb 10, 2017

@tisho you deserve a medal for this!

ajwhite referenced this issue Feb 11, 2017

Move all header imports to "<React/..>"
Summary:
To make React Native play nicely with our internal build infrastructure we need to properly namespace all of our header includes.

Where previously you could do `#import "RCTBridge.h"`, you must now write this as `#import <React/RCTBridge.h>`. If your xcode project still has a custom header include path, both variants will likely continue to work, but for new projects, we're defaulting the header include path to `$(BUILT_PRODUCTS_DIR)/usr/local/include`, where the React and CSSLayout targets will copy a subset of headers too. To make Xcode copy headers phase work properly, you may need to add React as an explicit dependency to your app's scheme and disable "parallelize build".

Reviewed By: mmmulani

Differential Revision: D4213120

fbshipit-source-id: 84a32a4b250c27699e6795f43584f13d594a9a82
@philipshurpik

This comment has been minimized.

Show comment
Hide comment
@philipshurpik

philipshurpik Feb 21, 2017

Guys, the easiest fix that I found - is to set "CONFIGURATION_BUILD_DIR" in buildSettings of your configuration like:
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)";

Or if you want to set in XCode:
Your Project -> Build Settings -> Build Locations -> Per-configuration Build Products Path
for your new configuration: $(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)

philipshurpik commented Feb 21, 2017

Guys, the easiest fix that I found - is to set "CONFIGURATION_BUILD_DIR" in buildSettings of your configuration like:
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)";

Or if you want to set in XCode:
Your Project -> Build Settings -> Build Locations -> Per-configuration Build Products Path
for your new configuration: $(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)

@j2kun

This comment has been minimized.

Show comment
Hide comment
@j2kun

j2kun Mar 9, 2017

Contributor

I would like to second that this is a major headache. Even if I patch it to find React, it can't find any other native dependencies. Do I have to patch the header search paths for every single dependency I add to the project?

Note, that if you're using Cocoapods, you may have to change another configuration variable to point to Release, or it won't be able to find linked Pods:

screen shot 2017-03-08 at 5 52 24 pm

Contributor

j2kun commented Mar 9, 2017

I would like to second that this is a major headache. Even if I patch it to find React, it can't find any other native dependencies. Do I have to patch the header search paths for every single dependency I add to the project?

Note, that if you're using Cocoapods, you may have to change another configuration variable to point to Release, or it won't be able to find linked Pods:

screen shot 2017-03-08 at 5 52 24 pm

@fungilation

This comment has been minimized.

Show comment
Hide comment
@fungilation

fungilation Mar 14, 2017

What about the "Per-configuration Immediate Build Products Path"? It'd make sense for Staging to share the same path as Release too?

fungilation commented Mar 14, 2017

What about the "Per-configuration Immediate Build Products Path"? It'd make sense for Staging to share the same path as Release too?

@Twinski

This comment has been minimized.

Show comment
Hide comment
@Twinski

Twinski Apr 13, 2017

@tisho Fix seems to be working! Maybe it's also useful to say that you also should repeat the $(REACT_HEADERS_PATH) for the VigiTest Target!

Twinski commented Apr 13, 2017

@tisho Fix seems to be working! Maybe it's also useful to say that you also should repeat the $(REACT_HEADERS_PATH) for the VigiTest Target!

@vonovak

This comment has been minimized.

Show comment
Hide comment
@vonovak

vonovak Apr 14, 2017

Contributor

If anyone is running into this issue when using xcode's workspaces, just make sure to check the settings of all your projects within the workspace.

Contributor

vonovak commented Apr 14, 2017

If anyone is running into this issue when using xcode's workspaces, just make sure to check the settings of all your projects within the workspace.

@luyuan11233

This comment has been minimized.

Show comment
Hide comment
@luyuan11233

luyuan11233 Jul 4, 2017

@tisho I followed your solution,but it didn't work.this is my screenshot:
I also add React in Build Phases --> Target Dependencies,but it didn't work too......
24ecffbb-f589-40ac-a1a6-a82032e33125
b99b7516-1ec8-4926-b0f6-695b7daf0eaa

luyuan11233 commented Jul 4, 2017

@tisho I followed your solution,but it didn't work.this is my screenshot:
I also add React in Build Phases --> Target Dependencies,but it didn't work too......
24ecffbb-f589-40ac-a1a6-a82032e33125
b99b7516-1ec8-4926-b0f6-695b7daf0eaa

@easybird

This comment has been minimized.

Show comment
Hide comment
@easybird

easybird Jul 6, 2017

@tisho Thx! Did the trick for me.
Extra thing that was needed in my case due to link errors:
add "$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)" to Library Search Paths (only for the custom configuration)

easybird commented Jul 6, 2017

@tisho Thx! Did the trick for me.
Extra thing that was needed in my case due to link errors:
add "$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)" to Library Search Paths (only for the custom configuration)

@Eluss

This comment has been minimized.

Show comment
Hide comment
@Eluss

Eluss Jul 7, 2017

@easybird I had the same issue and setting library search paths indeed solves the problem, thanks!

Eluss commented Jul 7, 2017

@easybird I had the same issue and setting library search paths indeed solves the problem, thanks!

@manbearshark

This comment has been minimized.

Show comment
Hide comment
@manbearshark

manbearshark Jul 10, 2017

In case anyone else runs into this issue and wants to test out the schemes-manager solution, I created an example project that incorporates @D1no 's guide as a github project you can pull and play around with. I spent some time hard-coding paths to header files and realized that this would not scale well once more developers ended up working on our projects, so decided to go the schemes-manager route, and everything works great so far.

manbearshark commented Jul 10, 2017

In case anyone else runs into this issue and wants to test out the schemes-manager solution, I created an example project that incorporates @D1no 's guide as a github project you can pull and play around with. I spent some time hard-coding paths to header files and realized that this would not scale well once more developers ended up working on our projects, so decided to go the schemes-manager route, and everything works great so far.

@andpor

This comment has been minimized.

Show comment
Hide comment
@andpor

andpor Jul 12, 2017

What a mess!!!! I just spent several days trying to figure out what is going on with my XCode project. We rely on custom configs heavily - this completely broke our project. When is this going to be fixed proper????

andpor commented Jul 12, 2017

What a mess!!!! I just spent several days trying to figure out what is going on with my XCode project. We rely on custom configs heavily - this completely broke our project. When is this going to be fixed proper????

@CharltonC

This comment has been minimized.

Show comment
Hide comment
@CharltonC

CharltonC Jul 25, 2017

Just want to add that this error occurs with a clean project boilerplate based on react-native init. The error mentioned and error icon are there from the start. However the error mentioned didn't cause the build to fail, the simulator was still able to load up.

Steps to reproduce:

  1. In Terminal, create the project: react-native init <project-name>
  2. Open the project in Xcode and open "AppDelegate.m" file, you should see the red error icon next to the code: #import <React/RCTBundleURLProvider.h>

Package/Software Versions installed as follows:

  • "react": "16.0.0-alpha.12",
  • "react-native": "0.46.4"
  • NPM: 3.10.10
  • XCode: 8.2.1

CharltonC commented Jul 25, 2017

Just want to add that this error occurs with a clean project boilerplate based on react-native init. The error mentioned and error icon are there from the start. However the error mentioned didn't cause the build to fail, the simulator was still able to load up.

Steps to reproduce:

  1. In Terminal, create the project: react-native init <project-name>
  2. Open the project in Xcode and open "AppDelegate.m" file, you should see the red error icon next to the code: #import <React/RCTBundleURLProvider.h>

Package/Software Versions installed as follows:

  • "react": "16.0.0-alpha.12",
  • "react-native": "0.46.4"
  • NPM: 3.10.10
  • XCode: 8.2.1
@jomaint

This comment has been minimized.

Show comment
Hide comment
@jomaint

jomaint Aug 25, 2017

Tried @tisho solution but i got a new error. Not really sure what am i suppose to do next.

library not found for -lRealmReact

jomaint commented Aug 25, 2017

Tried @tisho solution but i got a new error. Not really sure what am i suppose to do next.

library not found for -lRealmReact

@rzrobert

This comment has been minimized.

Show comment
Hide comment
@rzrobert

rzrobert Sep 21, 2017

@tisho Your answer is very exciting, according to your guidance, I built a number of new target, and can build success. But the new target fails in archive:
image

rzrobert commented Sep 21, 2017

@tisho Your answer is very exciting, according to your guidance, I built a number of new target, and can build success. But the new target fails in archive:
image

@varungupta85

This comment has been minimized.

Show comment
Hide comment
@varungupta85

varungupta85 Sep 21, 2017

I was able to create a staging environment following @philipshurpik and @j2kun suggestions. However, if I create a new scheme to create a staging archive, the build fails with the same error React/RCTBridgeModule.h file not found. If I edit the default scheme to use the staging configuration, then the archive is created successfully. Is there any other trick to get new schemes to work as well using the new staging configuration. I want to avoid having to keep editing the scheme every time I create a staging or a release archive. I fear I may forget to change and create unwanted problems.

varungupta85 commented Sep 21, 2017

I was able to create a staging environment following @philipshurpik and @j2kun suggestions. However, if I create a new scheme to create a staging archive, the build fails with the same error React/RCTBridgeModule.h file not found. If I edit the default scheme to use the staging configuration, then the archive is created successfully. Is there any other trick to get new schemes to work as well using the new staging configuration. I want to avoid having to keep editing the scheme every time I create a staging or a release archive. I fear I may forget to change and create unwanted problems.

@varungupta85

This comment has been minimized.

Show comment
Hide comment
@varungupta85

varungupta85 Sep 22, 2017

I created a staging configuration and I was able to create an IPA file using the staging configuration. But when I upload the IPA to iTunesConnect, I see that the IPA is missing the frameworks that I am using in the app. The frameworks are present when the IPA is created using the release configuration. Below are the screenshots for the staging and the release configuration. Observe that the frameworks are not listed.

Staging
screen shot 2017-09-22 at 9 06 25 am

Release
screen shot 2017-09-22 at 9 06 53 am

Observe that the frameworks are not listed in the staging IPA when I try to upload it iTunesConnect. Due to this, I got an error from iTunesConnect

Invalid Bundle - One or more dynamic libraries that are referenced by your app are not present in the dylib search path.

Below is a screenshot of the framework search paths in the Xcode project. The value is same for both staging and release.

screen shot 2017-09-22 at 12 36 38 pm

Please let me know how can I fix this problem.

varungupta85 commented Sep 22, 2017

I created a staging configuration and I was able to create an IPA file using the staging configuration. But when I upload the IPA to iTunesConnect, I see that the IPA is missing the frameworks that I am using in the app. The frameworks are present when the IPA is created using the release configuration. Below are the screenshots for the staging and the release configuration. Observe that the frameworks are not listed.

Staging
screen shot 2017-09-22 at 9 06 25 am

Release
screen shot 2017-09-22 at 9 06 53 am

Observe that the frameworks are not listed in the staging IPA when I try to upload it iTunesConnect. Due to this, I got an error from iTunesConnect

Invalid Bundle - One or more dynamic libraries that are referenced by your app are not present in the dylib search path.

Below is a screenshot of the framework search paths in the Xcode project. The value is same for both staging and release.

screen shot 2017-09-22 at 12 36 38 pm

Please let me know how can I fix this problem.

@D1no

This comment has been minimized.

Show comment
Hide comment
@D1no

D1no Sep 22, 2017

@varungupta85 check out schema manager mentioned above. Its purpose is to add the libraries from node_modules to the new release targets.

D1no commented Sep 22, 2017

@varungupta85 check out schema manager mentioned above. Its purpose is to add the libraries from node_modules to the new release targets.

@varungupta85

This comment has been minimized.

Show comment
Hide comment
@varungupta85

varungupta85 Sep 22, 2017

@D1no Thanks for your reply. I looked at the react-native-schemes-manager when I was going to through the comments. I felt that it is doing a lot of magic in the background which always worries me because if things start to break in future, I am not sure where to look at. I tried the suggestions from @philipshurpik and @j2kun using which I was able to build the app using staging configuration. I feel that I should be able to get the frameworks to be also present in the IPA with some change in settings in Xcode.

I will use the react-native-schemes-manager if I don't find a solution to this problem soon.

varungupta85 commented Sep 22, 2017

@D1no Thanks for your reply. I looked at the react-native-schemes-manager when I was going to through the comments. I felt that it is doing a lot of magic in the background which always worries me because if things start to break in future, I am not sure where to look at. I tried the suggestions from @philipshurpik and @j2kun using which I was able to build the app using staging configuration. I feel that I should be able to get the frameworks to be also present in the IPA with some change in settings in Xcode.

I will use the react-native-schemes-manager if I don't find a solution to this problem soon.

@D1no

This comment has been minimized.

Show comment
Hide comment
@D1no

D1no Sep 22, 2017

Actually there is not much magic. Just automation of a very annoying Xcode manual task. Read more at the bottom of the package, it’s sources and what it does. If all react native packages would be cocoa pods, the problem would not exist. But as they all require the rn packanger which has just two build configurations, those need to be copied for all of them. Thinkmill and we use it in production, and probably many more, and it works fine with version react-native@latest with Xcode 9.

So, requiring xproject files from node_modules was never something Xcode was designed for. I mean, sometimes it feels likeXcode projects were not even designed for a code revision system, due to its cryptic uid file steucture.

Until all that changes, or the guys at the metro bundler tackle this problem in a very smart way, the work stays the same. And it is very hard to configure yourself out of that.

D1no commented Sep 22, 2017

Actually there is not much magic. Just automation of a very annoying Xcode manual task. Read more at the bottom of the package, it’s sources and what it does. If all react native packages would be cocoa pods, the problem would not exist. But as they all require the rn packanger which has just two build configurations, those need to be copied for all of them. Thinkmill and we use it in production, and probably many more, and it works fine with version react-native@latest with Xcode 9.

So, requiring xproject files from node_modules was never something Xcode was designed for. I mean, sometimes it feels likeXcode projects were not even designed for a code revision system, due to its cryptic uid file steucture.

Until all that changes, or the guys at the metro bundler tackle this problem in a very smart way, the work stays the same. And it is very hard to configure yourself out of that.

@varungupta85

This comment has been minimized.

Show comment
Hide comment
@varungupta85

varungupta85 Sep 23, 2017

@D1no Thanks for the detailed reply. I feel more confident about using the scheme manager now and since I haven't been able to work around the problem I reported, I will start using it.

I just wanted to point out one small thing that after I updated the CONFIGURATION_BUILD_DIR AND POD_CONFIGURATION_BUILD_DIR, I was able to build the app. The missing frameworks in the IPA are all pods that I have installed in my app mainly Sentry, KSCrash, RSKImageCropper and QBImagePicker`. I am not sure if it sheds any more light on the problem I am having since you said that the said issue doesn't occur with packages installed using cocoa pods and that the scheme manager is mainly to fix the projects installed using npm.

Thanks again for taking the time to post your comments.

varungupta85 commented Sep 23, 2017

@D1no Thanks for the detailed reply. I feel more confident about using the scheme manager now and since I haven't been able to work around the problem I reported, I will start using it.

I just wanted to point out one small thing that after I updated the CONFIGURATION_BUILD_DIR AND POD_CONFIGURATION_BUILD_DIR, I was able to build the app. The missing frameworks in the IPA are all pods that I have installed in my app mainly Sentry, KSCrash, RSKImageCropper and QBImagePicker`. I am not sure if it sheds any more light on the problem I am having since you said that the said issue doesn't occur with packages installed using cocoa pods and that the scheme manager is mainly to fix the projects installed using npm.

Thanks again for taking the time to post your comments.

@stale

This comment has been minimized.

Show comment
Hide comment
@stale

stale bot Nov 22, 2017

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Maybe the issue has been fixed in a recent release, or perhaps it is not affecting a lot of people. If you think this issue should definitely remain open, please let us know why. Thank you for your contributions.

stale bot commented Nov 22, 2017

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Maybe the issue has been fixed in a recent release, or perhaps it is not affecting a lot of people. If you think this issue should definitely remain open, please let us know why. Thank you for your contributions.

@stale stale bot added the Stale label Nov 22, 2017

@stale stale bot closed this Nov 29, 2017

@hushicai

This comment has been minimized.

Show comment
Hide comment
@hushicai

hushicai commented Dec 12, 2017

worked.

@jinxac

This comment has been minimized.

Show comment
Hide comment
@jinxac

jinxac Dec 25, 2017

@varungupta85 even i am facing the issue of frameworks not being listed in staging scheme. Did you find a solution for this?

jinxac commented Dec 25, 2017

@varungupta85 even i am facing the issue of frameworks not being listed in staging scheme. Did you find a solution for this?

@jinxac

This comment has been minimized.

Show comment
Hide comment
@jinxac

jinxac Dec 25, 2017

@shohey1226 i tried the same thing but its not working for me. Looks like the pod libraries are getting copied into Staging folder instead of release which leads to #11813 (comment)

/Users/harkirat/Library/Developer/Xcode/DerivedData/wlv1-grovuwlrhzpjbvenlreejvbtlwol/Build/Intermediates.noindex/ArchiveIntermediates/wlv1 Staging/BuildProductsPath
tests-MBP:BuildProductsPath harkirat$ ls
Release-iphoneos	Staging-iphoneos
tests-MBP:BuildProductsPath harkirat$
tests-MBP:BuildProductsPath harkirat$ cd Staging-iphoneos/
tests-MBP:Staging-iphoneos harkirat$ ls
GTMOAuth2		Mixpanel		QBImagePickerController
GTMSessionFetcher	Pods_wlv1.framework	RSKImageCropper
GoogleToolboxForMac	Protobuf		nanopb
tests-MBP:Staging-iphoneos harkirat$
tests-MBP:BuildProductsPath harkirat$ cd Release-iphoneos/
tests-MBP:Release-iphoneos harkirat$ ls
49D27CAF-3566-30BB-9FF1-63E20D4D5231.bcsymbolmap	libRCTMaterialKit.a
57C7F55D-A2AE-30F3-A6EA-9F38A1651329.bcsymbolmap	libRCTNetwork.a
5maFL9							libRCTSettings.a
B00A891C-B9FD-3621-85B1-D7ACEEB3888C.bcsymbolmap	libRCTText.a
B881CB00-A637-3C8C-90B1-36E49E358AA1.bcsymbolmap	libRCTVibration.a
GeneratedInfoPlistDotEnv.h				libRCTWebSocket.a
Hhe8NH							libRNDeviceInfo.a
QBImagePicker.framework					libRNFIRMessaging.a
QBImagePicker.framework.dSYM				libRNFS.a
RSKImageCropper.framework				libRNFetchBlob.a
RSKImageCropper.framework.dSYM				libRNIntercom.a
include							libRNMixpanel.a
libBVLinearGradient.a					libReact.a
libBugsnagReactNative.a					libReactNativeConfig.a
libBugsnagStatic.a					libcxxreact.a
libCodePush.a						libdouble-conversion.a
libRCTActionSheet.a					libimageCropPicker.a
libRCTAnimation.a					libjschelpers.a
libRCTCamera.a						libthird-party.a
libRCTFBSDK.a						libyoga.a
libRCTGeolocation.a					wlv1.app
libRCTImage.a						wlv1.swiftmodule
libRCTLinking.a

I tried adding "$PODS_CONFIGURATION_BUILD_DIR" as recursive to FRAMEWORK_PATH but still it creates 2 folders.

jinxac commented Dec 25, 2017

@shohey1226 i tried the same thing but its not working for me. Looks like the pod libraries are getting copied into Staging folder instead of release which leads to #11813 (comment)

/Users/harkirat/Library/Developer/Xcode/DerivedData/wlv1-grovuwlrhzpjbvenlreejvbtlwol/Build/Intermediates.noindex/ArchiveIntermediates/wlv1 Staging/BuildProductsPath
tests-MBP:BuildProductsPath harkirat$ ls
Release-iphoneos	Staging-iphoneos
tests-MBP:BuildProductsPath harkirat$
tests-MBP:BuildProductsPath harkirat$ cd Staging-iphoneos/
tests-MBP:Staging-iphoneos harkirat$ ls
GTMOAuth2		Mixpanel		QBImagePickerController
GTMSessionFetcher	Pods_wlv1.framework	RSKImageCropper
GoogleToolboxForMac	Protobuf		nanopb
tests-MBP:Staging-iphoneos harkirat$
tests-MBP:BuildProductsPath harkirat$ cd Release-iphoneos/
tests-MBP:Release-iphoneos harkirat$ ls
49D27CAF-3566-30BB-9FF1-63E20D4D5231.bcsymbolmap	libRCTMaterialKit.a
57C7F55D-A2AE-30F3-A6EA-9F38A1651329.bcsymbolmap	libRCTNetwork.a
5maFL9							libRCTSettings.a
B00A891C-B9FD-3621-85B1-D7ACEEB3888C.bcsymbolmap	libRCTText.a
B881CB00-A637-3C8C-90B1-36E49E358AA1.bcsymbolmap	libRCTVibration.a
GeneratedInfoPlistDotEnv.h				libRCTWebSocket.a
Hhe8NH							libRNDeviceInfo.a
QBImagePicker.framework					libRNFIRMessaging.a
QBImagePicker.framework.dSYM				libRNFS.a
RSKImageCropper.framework				libRNFetchBlob.a
RSKImageCropper.framework.dSYM				libRNIntercom.a
include							libRNMixpanel.a
libBVLinearGradient.a					libReact.a
libBugsnagReactNative.a					libReactNativeConfig.a
libBugsnagStatic.a					libcxxreact.a
libCodePush.a						libdouble-conversion.a
libRCTActionSheet.a					libimageCropPicker.a
libRCTAnimation.a					libjschelpers.a
libRCTCamera.a						libthird-party.a
libRCTFBSDK.a						libyoga.a
libRCTGeolocation.a					wlv1.app
libRCTImage.a						wlv1.swiftmodule
libRCTLinking.a

I tried adding "$PODS_CONFIGURATION_BUILD_DIR" as recursive to FRAMEWORK_PATH but still it creates 2 folders.

@hussamkurd

This comment has been minimized.

Show comment
Hide comment
@hussamkurd

hussamkurd commented Feb 20, 2018

@wkoutre

This comment has been minimized.

Show comment
Hide comment
@wkoutre

wkoutre Mar 8, 2018

For anyone who comes across this, I managed to piece together a working XCode setup to get:

  • custom build configs working for Build and Archive in my react-native init apps (using Cocoapods); if you're using fastlane, this supports its deployment, as well
  • Microsoft's AppCenter and CodePush iOS SDKs working with said custom build configs (Staging, Angel, etc.)

Made a post on an issue in Microsoft's code-push repo detailing my setup.

wkoutre commented Mar 8, 2018

For anyone who comes across this, I managed to piece together a working XCode setup to get:

  • custom build configs working for Build and Archive in my react-native init apps (using Cocoapods); if you're using fastlane, this supports its deployment, as well
  • Microsoft's AppCenter and CodePush iOS SDKs working with said custom build configs (Staging, Angel, etc.)

Made a post on an issue in Microsoft's code-push repo detailing my setup.

@aligfl

This comment has been minimized.

Show comment
Hide comment
@aligfl

aligfl May 11, 2018

Shout out to @D1no! your solution worked for me! Been banging my head against the wall for the past few days. The solution worked for my CI system as well (buddybuild).

aligfl commented May 11, 2018

Shout out to @D1no! your solution worked for me! Been banging my head against the wall for the past few days. The solution worked for my CI system as well (buddybuild).

@DavidNorena

This comment has been minimized.

Show comment
Hide comment
@DavidNorena

DavidNorena May 12, 2018

@D1no you should post that in a medium article !! nice !

DavidNorena commented May 12, 2018

@D1no you should post that in a medium article !! nice !

@D1no

This comment has been minimized.

Show comment
Hide comment
@D1no

D1no May 13, 2018

When I jotted that down, I hoped a blog article would be obsolete by the time it goes online. Aka improvements of the metro bundler. Oh well - for better SEO I’ll add it to my todo list. Hopefully saving some devs the long path of desperate hacks until they find that comment. 🙃

D1no commented May 13, 2018

When I jotted that down, I hoped a blog article would be obsolete by the time it goes online. Aka improvements of the metro bundler. Oh well - for better SEO I’ll add it to my todo list. Hopefully saving some devs the long path of desperate hacks until they find that comment. 🙃

@facebook facebook locked and limited conversation to collaborators May 15, 2018

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.