Cập nhật 2017/08/06:
tôi đã cố gắng theo các bước của tôi dưới đây cho việc tích hợp Phản ứng Native vào một ứng dụng với Buck iOS nhưng tôi chạy vào các vấn đề khi sử dụng Phản ứng Native 0.47. Thay vào đó, tôi có một cách tiếp cận đơn giản hơn để nhận React Native làm việc với Buck trên iOS bằng cách liên kết đến các thư viện dựng sẵn. Tôi đã chia nhánh repo của dự án mẫu Buck và làm việc với React Native ở số this repo. Tôi cũng đã cập nhật README trong repo đó với các hướng dẫn để chạy bản demo ứng dụng Buck React Native iOS và cách tích hợp chính mình.
Lưu ý rằng có một vài vấn đề với cách tiếp cận này được ghi trong README có thể hoặc không có vấn đề gì khi sử dụng ứng dụng này trong ứng dụng sản xuất.
Repo đó cũng không bó JS cho sản xuất. câu trả lời
cũ hơn:
tôi đã Buck làm việc với một dự án iOS. Nó là rất nhiều công việc đang tiến triển, nhưng hoạt động. Một vài lưu ý: file
- tôi tự sao chép từ
node_modules/react-native/React
và node_modules/react-native/Libraries
(xem cấu trúc thư mục dưới đây).
- Tôi phải thêm các cờ
-w
và Wno-error
vào mỗi thư viện vì dự án chính đã coi cảnh báo là lỗi và tôi không muốn thấy tất cả các cảnh báo Phản ứng gốc này trong Xcode.
- Bạn có thể phải thêm nhiều thư viện hơn theo mẫu. Nó cũng giúp xem xét React Native podspec.
- Có thể có cơ hội để làm sạch mọi thứ như không cần
reactnative.xcodeproj
trong thư mục vendor/reactnative
(xem bên dưới).
- Có thể có một số công việc cần thiết để gói chính xác JS cho sản xuất. Hiện tại, nó sẽ chỉ hoạt động nếu JS được lấy từ một máy chủ (ví dụ: Node.js).
Đây là vendor/reactnative/BUCK
tập tin của tôi:
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'
]
)
Dưới đây là cấu trúc thư mục bên trong một thư mục nhà cung cấp trong dự án của tôi:
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
Sau đó, trong deps
file BUCK chính của tôi tôi thêm :
'//vendor/reactnative:ReactNative',
'//vendor/reactnative:RCTWebSocket',
'//vendor/reactnative:RCTText',
'//vendor/reactnative:RCTNetwork',
'//vendor/reactnative:RCTImage'
Bạn có thể thu hẹp điều này xuống thành mor hay không e vấn đề cụ thể? Ngay bây giờ tôi không thấy làm thế nào người ta có thể trả lời một cách đáng tin cậy điều này mà không viết một hướng dẫn đầy đủ để thiết lập và xây dựng các dự án có nguồn gốc phản ứng với buck, mà với tôi có vẻ quá rộng. Liên kết – Michael