Skip to content

Commit

Permalink
Fixes for Mac Catalyst
Browse files Browse the repository at this point in the history
  • Loading branch information
birdofpreyru committed Mar 28, 2023
1 parent d568c67 commit 89bdaad
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 125 deletions.
31 changes: 28 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@
[![NPM Downloads](https://img.shields.io/npm/dm/@dr.pogodin/react-native-static-server.svg)](https://www.npmjs.com/package/@dr.pogodin/react-native-static-server)
[![GitHub Repo stars](https://img.shields.io/github/stars/birdofpreyru/react-native-static-server?style=social)](https://github.com/birdofpreyru/react-native-static-server)

Embed HTTP server for [React Native] applications for Android, iOS, and Windows
platforms. Powered by [Lighttpd] server, supports both [new][New Architecture]
Embed HTTP server for [React Native] applications for Android, iOS, Mac (Catalyst),
and Windows platforms. Powered by [Lighttpd] server, supports both [new][New Architecture]
and [old][Old Architecture] RN architectures.

[![Sponsor](.README/sponsor.png)](https://github.com/sponsors/birdofpreyru)

<!-- links -->
[example app]: https://github.com/birdofpreyru/react-native-static-server/tree/master/example
[Expo]: https://expo.dev
[react-native-device-info]: https://www.npmjs.com/package/react-native-device-info
[react-native-fs]: https://www.npmjs.com/package/react-native-fs
[React Native]: https://reactnative.dev

Expand All @@ -28,11 +30,12 @@ and [old][Old Architecture] RN architectures.


## Getting Started
[Getting Started]: #getting-started

[CMake]: https://cmake.org

**Note:** _In addition to these instructions, have a look at
[the example project](https://github.com/birdofpreyru/react-native-static-server/tree/master/example)
[the example project][example app]
included into the library repository on GitHub_.

- [CMake] is required on the build host.
Expand Down Expand Up @@ -71,6 +74,22 @@ included into the library repository on GitHub_.
however at the moment we don't support it officially. If anybody wants
to help with this, contributions to the documentation / codebase are welcome._
- For **Mac Catalyst**:
- Disable Flipper in your app's Podfile.
- Add _Incoming Connections (Server)_ entitlement to the _App Sandbox_
(`com.apple.security.network.server` entitlement).
- If you bundle inside your app the assets to serve by the server,
keep in mind that in Mac Catalyst build they'll end up in a different
path, compared to the regular iOS bundle (see [example app]): \
iOS: `${RNFS.MainBundlePath}/webroot` \;
Mac Catalyst: `${RNFS.MainBundlePath}/Content/Resources/webroot`.Also keep
Also keep in mind that `Platform.OS` value equals `iOS` both for the normal
iOS and for the Mac Catalyst builds, and you should use different methods
to distinguish them; for example relying on `getDeviceType()` method of
[react-native-device-info] library, which returns 'Desktop' in case of
Catalyst build.
- For **Windows**:
- Out of the box, the current version of [react-native-fs] library (v2.20.0),
we depend upon, is broken on Windows. For now, it can be worked around by
Expand Down Expand Up @@ -201,6 +220,12 @@ outside platform-specific sub-folders.
and press &laquo;_Add_&raquo; button to add "webroot" assets
to the project target.
- **Mac Catalyst**
- The bundling for iOS explained above also bundles assets for Mac Catalyst;
beware, however, the bundled assets end up in a slightly different location
inside the bundle in this case (see details earlier in the [Getting Started]
section).
- **Windows**
- Edit `PropertySheet.props` file inside your app's
`windows/YOUR_PROJECT_NAME` folder, adding the following nodes into its root
Expand Down
2 changes: 1 addition & 1 deletion example/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ target 'ReactNativeStaticServerExample' do
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
:flipper_configuration => flipper_config,
# :flipper_configuration => flipper_config,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
Expand Down
123 changes: 7 additions & 116 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
PODS:
- boost (1.76.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- dr-pogodin-react-native-static-server (0.7.4):
- React-Core
Expand All @@ -12,74 +11,12 @@ PODS:
- React-Core (= 0.71.4)
- React-jsi (= 0.71.4)
- ReactCommon/turbomodule/core (= 0.71.4)
- Flipper (0.125.0):
- Flipper-Folly (~> 2.6)
- Flipper-RSocket (~> 1.4)
- Flipper-Boost-iOSX (1.76.0.1.11)
- Flipper-DoubleConversion (3.2.0.1)
- Flipper-Fmt (7.1.7)
- Flipper-Folly (2.6.10):
- Flipper-Boost-iOSX
- Flipper-DoubleConversion
- Flipper-Fmt (= 7.1.7)
- Flipper-Glog
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.1100)
- Flipper-Glog (0.5.0.5)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.4.3):
- Flipper-Folly (~> 2.6)
- FlipperKit (0.125.0):
- FlipperKit/Core (= 0.125.0)
- FlipperKit/Core (0.125.0):
- Flipper (~> 0.125.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- SocketRocket (~> 0.6.0)
- FlipperKit/CppBridge (0.125.0):
- Flipper (~> 0.125.0)
- FlipperKit/FBCxxFollyDynamicConvert (0.125.0):
- Flipper-Folly (~> 2.6)
- FlipperKit/FBDefines (0.125.0)
- FlipperKit/FKPortForwarding (0.125.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- FlipperKit/FlipperKitHighlightOverlay (0.125.0)
- FlipperKit/FlipperKitLayoutHelpers (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- FlipperKit/FlipperKitLayoutIOSDescriptors
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutTextSearchable (0.125.0)
- FlipperKit/FlipperKitNetworkPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitReactPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/SKIOSNetworkPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- fmt (6.2.1)
- glog (0.3.5)
- hermes-engine (0.71.4):
- hermes-engine/Pre-built (= 0.71.4)
- hermes-engine/Pre-built (0.71.4)
- libevent (2.1.12)
- OpenSSL-Universal (1.1.1100)
- RCT-Folly (2021.07.22.00):
- boost
- DoubleConversion
Expand Down Expand Up @@ -417,52 +354,28 @@ PODS:
- React-jsi (= 0.71.4)
- React-logger (= 0.71.4)
- React-perflogger (= 0.71.4)
- RNDeviceInfo (10.4.0):
- React-Core
- RNFS (2.20.0):
- React-Core
- SocketRocket (0.6.0)
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)

DEPENDENCIES:
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- dr-pogodin-react-native-static-server (from `../..`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- Flipper (= 0.125.0)
- Flipper-Boost-iOSX (= 1.76.0.1.11)
- Flipper-DoubleConversion (= 3.2.0.1)
- Flipper-Fmt (= 7.1.7)
- Flipper-Folly (= 2.6.10)
- Flipper-Glog (= 0.5.0.5)
- Flipper-PeerTalk (= 0.0.4)
- Flipper-RSocket (= 1.4.3)
- FlipperKit (= 0.125.0)
- FlipperKit/Core (= 0.125.0)
- FlipperKit/CppBridge (= 0.125.0)
- FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0)
- FlipperKit/FBDefines (= 0.125.0)
- FlipperKit/FKPortForwarding (= 0.125.0)
- FlipperKit/FlipperKitHighlightOverlay (= 0.125.0)
- FlipperKit/FlipperKitLayoutPlugin (= 0.125.0)
- FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0)
- FlipperKit/FlipperKitNetworkPlugin (= 0.125.0)
- FlipperKit/FlipperKitReactPlugin (= 0.125.0)
- FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
- FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.1100)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
Expand All @@ -485,26 +398,14 @@ DEPENDENCIES:
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFS (from `../node_modules/react-native-fs`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)

SPEC REPOS:
trunk:
- CocoaAsyncSocket
- Flipper
- Flipper-Boost-iOSX
- Flipper-DoubleConversion
- Flipper-Fmt
- Flipper-Folly
- Flipper-Glog
- Flipper-PeerTalk
- Flipper-RSocket
- FlipperKit
- fmt
- libevent
- OpenSSL-Universal
- SocketRocket
- YogaKit

EXTERNAL SOURCES:
boost:
Expand Down Expand Up @@ -577,32 +478,23 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
RNDeviceInfo:
:path: "../node_modules/react-native-device-info"
RNFS:
:path: "../node_modules/react-native-fs"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"

SPEC CHECKSUMS:
boost: 57d2868c099736d80fcd648bf211b4431e51a558
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
dr-pogodin-react-native-static-server: f60b64ad21b6fba402a904eb47ebe4701ab18364
FBLazyVector: 446e84642979fff0ba57f3c804c2228a473aeac2
FBReactNativeSpec: 241709e132e3bf1526c1c4f00bc5384dd39dfba9
Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
hermes-engine: a1f157c49ea579c28b0296bda8530e980c45bdb3
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
RCTRequired: 5a024fdf458fa8c0d82fc262e76f982d4dcdecdd
RCTTypeSafety: b6c253064466411c6810b45f66bc1e43ce0c54ba
Expand Down Expand Up @@ -631,11 +523,10 @@ SPEC CHECKSUMS:
React-RCTVibration: ad17efcfb2fa8f6bfd8ac0cf48d96668b8b28e0b
React-runtimeexecutor: 8fa50b38df6b992c76537993a2b0553d3b088004
ReactCommon: b49a4b00ca6d181ff74b17c12b2d59ac4add0bde
RNDeviceInfo: 749f2e049dcd79e2e44f134f66b73a06951b5066
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
Yoga: 79dd7410de6f8ad73a77c868d3d368843f0c93e0
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a

PODFILE CHECKSUM: cfd0096d9fdb061c4d2cebde05ace6074b274a7e
PODFILE CHECKSUM: fe412dcb66b982cccc6aadd229605204340c968a

COCOAPODS: 1.12.0
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
</dict>
Expand Down
9 changes: 9 additions & 0 deletions example/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,18 @@
},
"dependencies": {
"react": "18.2.0",
"react-native": "0.71.4",
"react-native-device-info": "^10.4.0",
"react-native-fs": "^2.20.0",
"react-native-webview": "^11.26.0",
"react-native-windows": "0.71.4",
"react-native": "0.71.4"
"react-native-windows": "0.71.4"
},
"devDependencies": {
"@babel/core": "^7.21.3",
"@babel/preset-env": "^7.20.0",
"@babel/runtime": "^7.21.0",
"babel-plugin-module-resolver": "^5.0.0",
"metro-config": "^0.76.0",
"metro-react-native-babel-preset": "0.73.8",
"babel-plugin-module-resolver": "^5.0.0"
"metro-react-native-babel-preset": "0.73.8"
}
}
10 changes: 9 additions & 1 deletion example/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import {

import { Colors } from 'react-native/Libraries/NewAppScreen';

import { getDeviceType } from 'react-native-device-info';

// TODO: rn-fs does not work on Windows out of the box,
// which is a know issue with a known workaround:
// https://github.com/microsoft/react-native-windows/issues/2829
Expand Down Expand Up @@ -44,13 +46,19 @@ export default function App() {
const [origin, setOrigin] = useState<string>('');

useEffect(() => {
const fileDir: string = Platform.select({
let fileDir: string = Platform.select({
android: `${RNFS.DocumentDirectoryPath}/webroot`,
ios: `${RNFS.MainBundlePath}/webroot`,
windows: `${RNFS.MainBundlePath}\\webroot`,
default: '',
});

// This check detects Mac Catalyst build, where bundled assets land
// to a different folder, compared to a regular iOS mobile device.
if (Platform.OS === 'ios' && getDeviceType() === 'Desktop') {
fileDir = `${RNFS.MainBundlePath}/Contents/Resources/webroot`;
}

// In our example, `server` is reset to null when the component is unmount,
// thus signalling that server init sequence below should be aborted, if it
// is still underway.
Expand Down

0 comments on commit 89bdaad

Please sign in to comment.