Building standalone locally with `expo/public-tools`


Basically, because of an issue with push notifications, I’m following the guide here to implement a fix that was pushed but not yet released as a part of an SDK release. My app is not detached, and has been published in the app store so I am generally familiar with the build process.

I am in way over my head with this and currently very stuck.

Steps I’ve taken:

  • git clone
  • it failed to clone the submodules so I manually cloned expo’s fork of react-native
  • got into stack overflow hell trying to fix issues with the pod Folly
  • removed all previous expo versions from the release in folders ./versioned-react-native as well as commenting out all their requirements in the Podfile
  • exited stack overflow hell
  • applied fixes seen here
  • attempted to run gulp ios-shell-app --action build --type archive --configuration Release

And it fails with the following error:

xcodebuild is running. Logging errors only. To see full output, use --verbose 1...

The following build commands failed:
        Ld /Users/derek/projects/expo-fix/shellAppBase-archive/Build/Intermediates.noindex/ArchiveIntermediates/ExpoKitApp/IntermediateBuildFilesPath/ normal armv7
(1 failure)
[20:57:13] 'ios-shell-app' errored after 3.62 min
[20:57:13] Error: Process exited with non-zero code: 65
    at ChildProcess.child.on (/Users/derek/projects/expo-fix/tools-public/node_modules/@expo/spawn-async/build/spawnAsync.js:39:21)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at maybeClose (internal/child_process.js:925:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)

I have no idea where to start - I feel like I did a fair amount of messing around and there are a lot of threads to pull at.

P.S. expo is the shit, thank god I haven’t had to deal with this kind of stuff until I wanted to do something really crafty



Hey, Derek!

When it comes to cloning the submodules, next time I would recommend running git submodule update --init, which takes care of both initializing any missing submodules and updating them to required commits. :slightly_smiling_face:

You don’t need to remove previous SDK versions from versioned-react-native (in fact it may cause more problems). There is another way to strip old SDKs from the archive—run the command with --shellAppSdkVersion UNVERSIONED param. This will ensure that both the Podfile (package.json for native iOS dependencies) and the project are configured well for a single SDK app (and that’s what we’re trying to build here).

What happens if you run:?

gulp ios-shell-app --action build --type archive --configuration Release --shellAppSdkVersion UNVERSIONED

What if you tried adding --verbose 1 to the xcodebuild printed just above ARCHIVE FAILED section and running it manually?



Hey, thanks for the response!

When it comes to cloning the submodules…

I think the submodules issue was because I wasn’t cloning them over https, and my public key doesn’t have permission to clone it, so I did it over https and it worked fine.

You don’t need to remove previous SDK versions from versioned-react-native (in fact it may cause more problems).

Doing that was the only way I was able to fix the pod issue, I had a feeling it was going to mess things up.

When I ran it with --verbose 1, this is the result. Here’s the result of building it with xcode, not sure if it helps. Going to re-fork the repo and try to run it with UNVERSIONED without having removed everything I did, I’ll let you know how that goes.



@sjchmiela I ran gulp ios-shell-app --action build --type archive --configuration Release --shellAppSdkVersion UNVERSIONED on release 2.10.1 without the changes in your pull request applied, and it built fine. However, when I make the changes to EXKernel.m and EXUserNotificationManager.m, it fails with the same error.

Edit: I stashed the change to EXKernel.m and only ran it with the changes to EXUserNotificationManager.m and the build completed.


closed #5

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.