appetizer-bundle
Version:
Create/Bundle React-Native apps to on appetize.io
168 lines (121 loc) • 4.12 kB
Markdown
# appetizer-bundle
Creates an uploadable bundle of your React-Native application so it can run on
the appetize.io platform. It currently only supports `ios` builds. Please note
that this module assumes you have a iOS build tool chain installed on your
system. As it needs to have access to the following CLI's:
- `zip`
- `xcodebuild`
## Installation
```
npm install --save appetizer-bundle
```
## Part of the Appetizer suite
This module is part of a larger suite of components that work excellent with each
other. If you liked this module we highly suggest checking out:
- [appetizer][api] A Node.js component for interacting with the Appetize.io API.
- [appetizer-bundle][bundle] Prepares and packs your React-Native application for uploading to Appetize.io.
- [appetizer-component][component] A React Component to embed your uploaded application.
[api]: https://github.com/godaddy/appetizer
[bundle]: https://github.com/godaddy/appetizer-bundle
[component]: https://github.com/godaddy/appetizer-component
## API
The following arguments are required in the `Bundle` constructor:
- `name` The name of your application as you configured it with `react-native init`
- `dir` The root directory of your React-Native app, this contains the `ios` and
`android` folders.
```js
const Bundle = require('appetizer-bundle');
const bundle = new Bundle('name of your application', 'path to your app dir');
```
### run
This is the method that most people would be using, it chains all other
methods in the correct order to generate a new build:
1. Rewrite the Delegate function so your app uses the offline bundle.
2. Create a new xcodebuild of the updated manifest.
3. Create the offline React-Native bundle.
4. Zip the resulting application.
5. Rewind all changes made to the app so it's the in the previous state.
```js
bundle.run(function (err, zipfile) {
if (err) {
// Handle errors
}
//
// Upload zipfile location using the appetizer library
//
});
```
### offline
Generates the offline React-Native bundle. The method expects 2 arguments:
1. The directory in which the resulting offline bundle should be placed
2. Completion callback
```js
bundle.offline(dir, (err) => {
if (err) {
// Handle errors
}
});
```
### rewrite
Rewrites the `AppDelegate.m` so it points to new React-Native offline bundle.
The rewrite function is a bit special. It receives a `restore` function as
second argument which restores the `AppDelegate.m` to it's original state.
The `restore` function accepts the following arguments:
- `err` An error that will be passed in the completion argument so you can clean
up, and forward it to the callback.
- `next` Completion callback.
```js
bundle.rewrite((err, restore) => {
if (err) {
// Handle errors
}
restore(err, function (err) {
if (err) {
// Handle errors
}
});
});
```
### zip
Packs the resulting the application in a zip file so it can easily be uploaded
to the appetize.io service as it only accepts `zip` or `tar` files. The zip
callback receives the full path to the generated zip file as result.
```js
bundle.zip(function (err, zipfilelocation) {
if (err) {
// Handle errors
}
//
// Upload zipfile location using the appetizer library
//
});
```
### xcodeproj
Read the given project directory and check if we have an xcode project or
workspace we're dealing with. It requires the following arguments.
- `dir` The location where the project files should be located in.
- `fn` Completion callback that receives error and a project object.
The project object contains the following information:
- `name` Name of the file
- `file` Full file name
- `workspace` Boolean indication if its a workspace.
```js
bundle.xcodeproj(dir, function (err, project) {
if (err) {
// Handle errors
}
console.log(project.file);
});
```
### xcodebuild
Generate a new iphonesimulator compatible xcode build. It expects a single
argument which is an error first completion callback.
```js
bundle.xcodebuild(function (err) {
if (err) {
// Handle errors
}
});
```
## License
[MIT](LICENSE)