No commit activity in last 3 years
No release in over 3 years
Converts a project created with react-native init to use CocoaPods with the React pod from node_modules. This preserves compatibility with react-native link. A converted project will still start the Metro packager automatically via a Run Script build phase in the Xcode project. This is an alternative to performing manual surgery on a project in Xcode.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 1.16
~> 0.12
~> 12.3
~> 3.8
= 0.65.0
~> 0.16
~> 0.9

Runtime

 Project Readme

react_native_util gem

Gem Downloads License CircleCI

Work in progress

Community utility CLI for React Native projects.

Converts a project created with react-native init to use CocoaPods with the React pod from node_modules. This preserves compatibility with react-native link. A converted project will still start the Metro packager automatically via a Run Script build phase in the Xcode project. This is an alternative to performing manual surgery on a project in Xcode.

Prerequisites

macOS & Xcode required

The react_pod command requires yarn from Homebrew and the react-native-cli. If installing react_native_util from the Homebrew tap, yarn will be automatically installed if not present. The react-native-cli may also be installed from Homebrew if desired:

brew install jdee/tap/react_native_util --with-react-native-cli

If running from RubyGems, please make sure these packages are installed:

brew install yarn
npm install -g react-native-cli

or

brew install react-native-cli

Installation

[sudo] gem install react_native_util

Install from Homebrew tap

brew install jdee/tap/react_native_util

Include react-native-cli from Homebrew:

brew install jdee/tap/react_native_util --with-react-native-cli

Gemfile

gem 'react_native_util'

Fastlane

See https://github.com/jdee/fastlane-plugin-react_native_util

fastlane add_plugin react_native_util

Usage

react_native_util -h
rn -h
rn react_pod -h

react_pod command

Converts a React Native Xcode project to use the React pod from node_modules instead of the projects in the Libraries group. This makes it easier to manage native dependencies while preserving compatibility with react-native link. The command looks for your app's package.json in the current directory and expects your Xcode project to be located under the ios subdirectory and have the name specified for your app in package.json. If a Podfile is found in the ios subdirectory, the conversion will fail.

The React.xcodeproj in the Libraries group of a project created by react-native init automatically starts the Metro packager via a Run Script build phase. When the react_pod command removes the Libraries group from your app project, it adds an equivalent build phase to your app project so that the packager will automatically be started when necessary by Xcode.

Use the -u or --update option to update the packager script after updating React Native, in case the packager script on the React.xcodeproj changes after it's removed from your project.

Options

option description env. var.
-h, --help Print command help
-t, --trace Print a stack trace in case of error
-u, --update Update a previously converted project
--[no-]repo-update Don't update the local podspec repo REACT_NATIVE_UTIL_REPO_UPDATE

Try it out

Convert examples/TestApp.

First install dependencies.

bundle check || bundle install

Then use the Rake task

bundle exec rake react_pod

or the CLI.

cd examples/TestApp
bundle exec rn react_pod

Finally see the changes.

git status

Typical command output:

2019-05-15T19:48:43-07:00 react_native_util react_pod v0.6.0
2019-05-15T19:48:46-07:00  Darwin 18.5.0 x86_64
2019-05-15T19:48:46-07:00  Ruby 2.6.3: ~/.rvm/rubies/ruby-2.6.3/bin/ruby
2019-05-15T19:48:46-07:00  RubyGems 3.0.3: ~/.rvm/rubies/ruby-2.6.3/bin/gem
2019-05-15T19:48:46-07:00  Bundler 2.0.1: ~/.rvm/gems/ruby-2.6.3/bin/bundle
2019-05-15T19:48:46-07:00  react-native-cli: ~/.nvm/versions/node/v10.15.0/bin/react-native
2019-05-15T19:48:46-07:00   react-native-cli: 2.0.1
2019-05-15T19:48:46-07:00   react-native: 0.59.8
2019-05-15T19:48:46-07:00  yarn 1.16.0: /usr/local/bin/yarn
2019-05-15T19:48:47-07:00  cocoapods 1.6.2: ~/.rvm/gems/ruby-2.6.3/bin/pod
2019-05-15T19:48:47-07:00  cocoapods-core: 1.6.2
2019-05-15T19:48:47-07:00 package.json:
2019-05-15T19:48:47-07:00  app name: "TestApp"
2019-05-15T19:48:47-07:00 Found Xcode project at ~/github/$USER/react_native_util/examples/TestApp/ios/TestApp.xcodeproj
2019-05-15T19:48:47-07:00 Dependencies:
2019-05-15T19:48:47-07:00  react-native-webview
2019-05-15T19:48:47-07:00 Unlinking dependencies
[✔] react-native unlink react-native-webview success in 0.7 s
2019-05-15T19:48:48-07:00 Generating ios/Podfile
2019-05-15T19:48:48-07:00 Removing Libraries from TestApp
2019-05-15T19:48:48-07:00  Removing libRCTBlob.a
2019-05-15T19:48:48-07:00  Removing libRCTAnimation.a
2019-05-15T19:48:48-07:00  Removing libReact.a
2019-05-15T19:48:48-07:00  Removing libRCTActionSheet.a
2019-05-15T19:48:48-07:00  Removing libRCTGeolocation.a
2019-05-15T19:48:48-07:00  Removing libRCTImage.a
2019-05-15T19:48:48-07:00  Removing libRCTLinking.a
2019-05-15T19:48:48-07:00  Removing libRCTNetwork.a
2019-05-15T19:48:48-07:00  Removing libRCTSettings.a
2019-05-15T19:48:48-07:00  Removing libRCTText.a
2019-05-15T19:48:48-07:00  Removing libRCTVibration.a
2019-05-15T19:48:48-07:00  Removing libRCTWebSocket.a
2019-05-15T19:48:48-07:00 Removing Libraries from TestAppTests
2019-05-15T19:48:48-07:00  Removing libReact.a
2019-05-15T19:48:48-07:00 Removing Libraries from TestApp-tvOS
2019-05-15T19:48:48-07:00  Removing libReact.a
2019-05-15T19:48:48-07:00  Removing libRCTAnimation.a
2019-05-15T19:48:48-07:00  Removing libRCTImage-tvOS.a
2019-05-15T19:48:48-07:00  Removing libRCTLinking-tvOS.a
2019-05-15T19:48:48-07:00  Removing libRCTNetwork-tvOS.a
2019-05-15T19:48:48-07:00  Removing libRCTSettings-tvOS.a
2019-05-15T19:48:48-07:00  Removing libRCTText-tvOS.a
2019-05-15T19:48:48-07:00  Removing libRCTWebSocket-tvOS.a
2019-05-15T19:48:48-07:00 Removing Libraries from TestApp-tvOSTests
2019-05-15T19:48:48-07:00  Removing libReact.a
2019-05-15T19:48:48-07:00 Removing RCTAnimation.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing React.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTActionSheet.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTBlob.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTGeolocation.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTImage.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTLinking.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTNetwork.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTSettings.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTText.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTVibration.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing RCTWebSocket.xcodeproj from Libraries group.
2019-05-15T19:48:48-07:00 Removing Libraries group.
2019-05-15T19:48:48-07:00 Linking dependencies
[✔] react-native link react-native-webview success in 0.5 s
2019-05-15T19:48:48-07:00 Generating Pods project and ios/TestApp.xcworkspace
2019-05-15T19:48:48-07:00 Once pod install is complete, your project will be part of this workspace.
2019-05-15T19:48:48-07:00 From now on, you should build the workspace with Xcode instead of the project.
2019-05-15T19:48:48-07:00 Always add the workspace and Podfile.lock to SCM.
2019-05-15T19:48:48-07:00 It is common practice also to add the Pods directory.
2019-05-15T19:48:48-07:00 The workspace will be automatically opened when pod install completes.
[✔] pod install success in 10.6 s
2019-05-15T19:48:59-07:00 Conversion complete ✅
2019-05-15T19:48:59-07:00 $ open ios/TestApp.xcworkspace

Convert your own app with Rake

From this repo:

bundle exec rake react_pod[/path/to/your/app]

Rake task

Add to Rakefile:

require 'react_native_util/rake'
ReactNativeUtil::Rake::ReactPodTask.new

Customize:

require 'react_native_util/rake'
ReactNativeUtil::Rake::ReactPodTask.new(
  :react_pod,                         # task name
  'Convert project to use React pod', # description
  'Update project',                   # description for :update task
  chdir: '/path/to/rn/project',       # path to project package.json
  repo_update: true                   # optionally disable pod repo update
)

Override chdir at the command line:

rake react_pod[/path/to/another/rn/project]

Convert project:

rake react_pod

Update converted project:

rake react_pod:update

Ruby script

require 'react_native_util/converter'

Dir.chdir '/path/to/rn/project' do
  begin
    converter = ReactNativeUtil::Converter.new(repo_update: true)

    # Convert a project to use the React pod
    converter.convert_to_react_pod!

    # Update a converted project
    converter.update_project!
  rescue ReactNativeUtil::BaseException => e
    puts "Error from ReactNativeUtil::Converter: #{e.message}"
  end
end

Documentation

Hosted Yard documentation available at https://www.rubydoc.info/gems/react_native_util.

Successfully converted apps:

https://github.com/azhavrid/movie-swiper (gist)