2016-01-25 18 views
17

バックとはiOSとAndroidの両方のプロジェクトで素晴らしいツールのように聞こえるが、反応ネイティブのための使い方に関する情報は見つけられていないプロジェクト。バックを使ってiOSとAndroidの両方で反応するネイティブアプリを構築する方法

更新

この上で行われているが、それはまだ推奨されないことがいくつかの作業があるように見えます。

https://github.com/facebook/nuclide/issues/31#issuecomment-164897170 https://github.com/facebook/buck/tree/master/test/com/facebook/buck/js

アップデート2

製品の痛みリンクhttps://productpains.com/post/react-native/add-buck-as-a-build-option

+1

これを「mor」に絞り込むことができますか特定の問題?今では、私はちょっと広すぎるように見えますが、反応的なネイティブプロジェクトを構築してビルドするための完全なガイドを書かずに、確実にこれに答える方法はありません。 – Michael

答えて

2

にはまだバックにRNアプリケーションを構築するための公式ドキュメント/テンプレートはいませんが、それは難しいことではありません。あなたのファイルbuild.gradleと同じ機能を果たすBUCKファイルを追加する必要があります。

それはちょうどほとんどです:

  • が、それはまたbundles the JS、アプリの資産 フォルダにリリースモードではReact Native from JCenterへの依存関係を持つAndroidアプリ(バックはそれを行うためのandroid_binaryルールを持っている)
  • を宣言します。あなたはこれをスキップすることができます(devモードでは、アプリケーションは実行時にlocalhostからJSを取得します)が、私はBuckもJSをバンドルするための組み込みサポートを持っていると信じています。
+0

"bundles the JS"のリンクが切れています。 – user2977578

3

アップデート2017年8月6日:私は統合するための以下の私の手順に従って試してみました

はバックとiOSアプリにネイティブ反応するが反応させ、ネイティブの0.47を使用したとき、私は問題に走りました。代わりに、私はReact NativeをiOS上でBuckと連携させるために、あらかじめ構築されたライブラリにリンクすることにより、新しい簡単なアプローチをとっています。私はBuckのサンプルプロジェクトのレポをフォークし、それをのReact Nativeで作業させました。また、そのレポのREADMEをデモBuck ReactネイティブiOSアプリの実行方法と自分自身を統合する方法で更新しました。

注:このアプローチはREADMEに記載されていますが、これは実動アプリケーションでこれを使用する際に問題があるかもしれません。

このレポはまだJSを生産用にバンドルしていません。


古い答え:

私は、iOSプロジェクトでの作業バックを得ました。それは非常に進行中の作業ですが、動作します。いくつかの注意事項:node_modules/react-native/Reactnode_modules/react-native/Librariesから

  • 私は手動でコピーしたファイルは、(下記のフォルダ構造を参照してください)。
  • メインプロジェクトで警告をエラーとして処理していたため、XcodeでこれらのReact Native警告をすべて表示したくないため、-wとフラグを各ライブラリに追加する必要がありました。
  • パターンの後にライブラリを追加する必要があります。それはまた、React Native podspecを見るのに役立ちます。
  • vendor/reactnativeフォルダ(下記参照)に必要がないようなものをクリーニングする機会があります。
  • 生産用にJSを正しくバンドルするには、おそらくいくつかの作業が必要です。現在、JSがサーバー(Node.jsなど)からフェッチされている場合にのみ機能します。ここで

vendor/reactnative/BUCKファイルです。ここで

apple_library(
    name = 'ReactNative', 
    srcs = glob([ 
    'React/**/*.m', 
    'React/**/*.mm', 
    'React/**/*.c', 
    'React/**/*.S', 
    ]), 
    exported_headers = glob([ 
    'React/**/*.h', 
    ]), 
    system_frameworks = [ 
    'JavaScriptCore' 
    ], 
    exported_linker_flags = [ 
    '-lc++', 
    ], 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
) 

apple_library(
    name = 'RCTWebSocket', 
    srcs = glob([ 
    'Libraries/WebSocket/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    ]), 
    exported_headers = glob([ 
    'Libraries/WebSocket/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ] 
) 

apple_library(
    name = 'RCTNetwork', 
    srcs = glob([ 
    'Libraries/Network/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    ]), 
    exported_headers = glob([ 
    'Libraries/Network/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ] 
) 

apple_library(
    name = 'RCTText', 
    srcs = glob([ 
    'Libraries/Text/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    ]), 
    exported_headers = glob([ 
    'Libraries/Text/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ] 
) 

apple_library(
    name = 'RCTImage', 
    srcs = glob([ 
    'Libraries/Image/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    'Libraries/Network/*.h' 
    ]), 
    exported_headers = glob([ 
    'Libraries/Image/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ':RCTNetwork' 
    ] 
) 

は私のプロジェクトでは、ベンダーのフォルダ内のフォルダ構造である:私は追加私のメインBUCKファイルのdepsで次に

vendor/reactnative 
├── BUCK 
├── Libraries 
│   ├── ART 
│   ├── ActionSheetIOS 
│   ├── AdSupport 
│   ├── Animated 
│   ├── AppRegistry 
│   ├── AppState 
│   ├── BatchedBridge 
│   ├── BugReporting 
│   ├── CameraRoll 
│   ├── Components 
│   ├── CustomComponents 
│   ├── DebugComponentHierarchy 
│   ├── Devtools 
│   ├── EventEmitter 
│   ├── Experimental 
│   ├── Fetch 
│   ├── Geolocation 
│   ├── Image 
│   ├── Inspector 
│   ├── Interaction 
│   ├── JavaScriptAppEngine 
│   ├── LayoutAnimation 
│   ├── Linking 
│   ├── LinkingIOS 
│   ├── Modal 
│   ├── NativeAnimation 
│   ├── NavigationExperimental 
│   ├── Network 
│   ├── Promise.js 
│   ├── PushNotificationIOS 
│   ├── QuickPerformanceLogger 
│   ├── RCTTest 
│   ├── RKBackendNode 
│   ├── ReactIOS 
│   ├── ReactNative 
│   ├── Sample 
│   ├── Settings 
│   ├── Storage 
│   ├── StyleSheet 
│   ├── Text 
│   ├── Utilities 
│   ├── Vibration 
│   ├── WebSocket 
│   ├── promiseRejectionIsError.js 
│   ├── react-native 
│   └── vendor 
├── React 
│   ├── Base 
│   ├── Executors 
│   ├── Layout 
│   ├── Modules 
│   ├── Profiler 
│   └── Views 
└── reactnative.xcodeproj 
    ├── project.pbxproj 
    └── xcuserdata 

'//vendor/reactnative:ReactNative', 
'//vendor/reactnative:RCTWebSocket', 
'//vendor/reactnative:RCTText', 
'//vendor/reactnative:RCTNetwork', 
'//vendor/reactnative:RCTImage' 
関連する問題