-Update 2017.08.06:
habe ich versucht, meine Schritte folgende unten für Native in einen iOS-App mit Buck Reagieren Integration aber ich lief Probleme in, wenn Einheimischer 0,47 Reagieren mit. Stattdessen habe ich einen neuen, einfacheren Ansatz, um React Native mit Buck auf iOS zu verbinden, indem ich mit vorgefertigten Bibliotheken verlinke. Ich gab dem Buck-Beispielprojekt-Repo den Vortritt und arbeitete mit React Native in . Ich aktualisierte auch die README in diesem Repo mit Anweisungen zum Ausführen der Demo Buck React Native iOS App und wie Sie sich integrieren.
Beachten Sie, dass einige Probleme mit diesem in der README dokumentierten Ansatz für die Verwendung in einer Produktions-App ein Problem darstellen.
Dieses Repo bündelt das JS noch nicht für die Produktion.
Ältere Antwort:
Ich habe Buck mit einem iOS-Projekt arbeiten. Es ist sehr viel Arbeit im Gange, aber funktioniert. Ein paar Anmerkungen:
- ich manuell kopiert Dateien von
node_modules/react-native/React
und node_modules/react-native/Libraries
(siehe unten Ordnerstruktur).
- Ich musste die
-w
und Wno-error
Flags zu jeder Bibliothek hinzufügen, weil das Hauptprojekt als Warnungen behandelt hatte, und ich wollte nicht alle diese React Native Warnungen in Xcode sehen.
- Sie müssen möglicherweise weitere Bibliotheken nach dem Muster hinzufügen. Es hilft auch, den React Native podspec zu betrachten.
- Es gibt wahrscheinlich Gelegenheit, Dinge aufzuräumen, wie es
reactnative.xcodeproj
in der vendor/reactnative
Ordner nicht benötigt (siehe unten).
- Es ist wahrscheinlich etwas Arbeit erforderlich, um das JS für die Produktion korrekt zu bündeln. Derzeit funktioniert es nur, wenn JS von einem Server (z. B. Node.js) abgerufen wird.
Hier ist meine vendor/reactnative/BUCK
Datei:
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
Dann in der deps
meiner Haupt BUCK Datei, die ich hinzufügen:
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'
]
)
Hier wird die Ordnerstruktur in einem Anbieter-Ordner in meinem Projekt ist :
'//vendor/reactnative:ReactNative',
'//vendor/reactnative:RCTWebSocket',
'//vendor/reactnative:RCTText',
'//vendor/reactnative:RCTNetwork',
'//vendor/reactnative:RCTImage'
Könnten Sie dies auf ein mor eingrenzen Das spezifische Problem? Im Moment sehe ich nicht, wie man das zuverlässig beantworten könnte, ohne einen kompletten Leitfaden für die Einrichtung und den Aufbau reaktionsfähiger Projekte mit Buck zu schreiben, was mir etwas zu weit erscheint. – Michael