Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 25 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,12 @@ npx expo install react-native-orientation-director

## Setup

To properly handle interface orientation changes in iOS, you need to update your AppDelegate.mm file.
In your AppDelegate.mm file, import "OrientationDirector.h" and implement supportedInterfaceOrientationsForWindow method as follows:
To properly handle interface orientation changes in iOS, you need to update your AppDelegate file. Since React Native
0.77, the AppDelegate has been migrated to Swift, so see the instructions below for both Swift and Objective-C.

### Objective-C

In your AppDelegate.h file, import "OrientationDirector.h" and implement supportedInterfaceOrientationsForWindow method as follows:

```objc
#import <OrientationDirector.h>
Expand All @@ -65,6 +69,23 @@ In your AppDelegate.mm file, import "OrientationDirector.h" and implement suppor
}
```

### Swift

You need to create a [bridging header](https://developer.apple.com/documentation/swift/importing-objective-c-into-swift#Import-Code-Within-an-App-Target)
to import the library, as shown below:

```
#import "OrientationDirector.h"
```

Then, in your AppDelegate.swift file, implement the supportedInterfaceOrientationsFor method as follows:

```swift
override func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return OrientationDirector.getSupportedInterfaceOrientationsForWindow()
}
```

If you need help, you can check the example project.

There is no need to do anything in Android, it works out of the box.
Expand All @@ -74,7 +95,7 @@ There is no need to do anything in Android, it works out of the box.
This library exports a class called: [RNOrientationDirector](https://github.com/gladiuscode/react-native-orientation-director/blob/main/src/RNOrientationDirector.ts) that exposes the following methods:

| Method | Description |
| ---------------------------------------- | --------------------------------------------------------------------------------- |
|------------------------------------------|-----------------------------------------------------------------------------------|
| getInterfaceOrientation | Returns the last interface orientation |
| getDeviceOrientation | Returns the last device orientation |
| lockTo | Locks the interface to a specific orientation |
Expand All @@ -94,7 +115,7 @@ This library exports a class called: [RNOrientationDirector](https://github.com/
In addition, the library exposes the following hooks:

| Hook | Description |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------|
| [useInterfaceOrientation](https://github.com/gladiuscode/react-native-orientation-director/blob/main/src/hooks/useInterfaceOrientation.hook.ts) | Returns the current interface orientation and listens to changes |
| [useDeviceOrientation](https://github.com/gladiuscode/react-native-orientation-director/blob/main/src/hooks/useDeviceOrientation.hook.ts) | Returns the current device orientation and listens to changes |
| [useIsInterfaceOrientationLocked](https://github.com/gladiuscode/react-native-orientation-director/blob/main/src/hooks/useIsInterfaceOrientationLocked.hook.ts) | Returns the current interface orientation status and listens to changes |
Expand Down
10 changes: 5 additions & 5 deletions android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
OrientationDirector_kotlinVersion=1.7.0
OrientationDirector_minSdkVersion=21
OrientationDirector_targetSdkVersion=31
OrientationDirector_compileSdkVersion=31
OrientationDirector_ndkversion=21.4.7075529
OrientationDirector_kotlinVersion=2.0.21
OrientationDirector_minSdkVersion=24
OrientationDirector_targetSdkVersion=34
OrientationDirector_compileSdkVersion=35
OrientationDirector_ndkVersion=27.1.12297006

#########################
# TESTING
Expand Down
3 changes: 2 additions & 1 deletion example/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ ruby ">= 2.6.10"
# Exclude problematic versions of cocoapods and activesupport that causes build failures.
gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
gem 'concurrent-ruby', '< 1.3.4'

gem 'xcodeproj', '< 1.26.0'
gem 'xcodeproj', '< 1.26.0'
1 change: 1 addition & 0 deletions example/Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ PLATFORMS
DEPENDENCIES
activesupport (>= 6.1.7.5, != 7.1.0)
cocoapods (>= 1.13, != 1.15.1, != 1.15.0)
concurrent-ruby (< 1.3.4)
xcodeproj (< 1.26.0)

RUBY VERSION
Expand Down
64 changes: 41 additions & 23 deletions example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,58 +2,76 @@ This is a new [**React Native**](https://reactnative.dev) project, bootstrapped

# Getting Started

>**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding.
> **Note**: Make sure you have completed the [Set Up Your Environment](https://reactnative.dev/docs/set-up-your-environment) guide before proceeding.

## Step 1: Start the Metro Server
## Step 1: Start Metro

First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native.
First, you will need to run **Metro**, the JavaScript build tool for React Native.

To start Metro, run the following command from the _root_ of your React Native project:
To start the Metro dev server, run the following command from the root of your React Native project:

```bash
# using npm
```sh
# Using npm
npm start

# OR using Yarn
yarn start
```

## Step 2: Start your Application
## Step 2: Build and run your app

Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app:
With Metro running, open a new terminal window/pane from the root of your React Native project, and use one of the following commands to build and run your Android or iOS app:

### For Android
### Android

```bash
# using npm
```sh
# Using npm
npm run android

# OR using Yarn
yarn android
```

### For iOS
### iOS

```bash
# using npm
For iOS, remember to install CocoaPods dependencies (this only needs to be run on first clone or after updating native deps).

The first time you create a new project, run the Ruby bundler to install CocoaPods itself:

```sh
bundle install
```

Then, and every time you update your native dependencies, run:

```sh
bundle exec pod install
```

For more information, please visit [CocoaPods Getting Started guide](https://guides.cocoapods.org/using/getting-started.html).

```sh
# Using npm
npm run ios

# OR using Yarn
yarn ios
```

If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly.
If everything is set up correctly, you should see your new app running in the Android Emulator, iOS Simulator, or your connected device.

This is one way to run your app — you can also build it directly from Android Studio or Xcode.

This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.
## Step 3: Modify your app

## Step 3: Modifying your App
Now that you have successfully run the app, let's make changes!

Now that you have successfully run the app, let's modify it.
Open `App.tsx` in your text editor of choice and make some changes. When you save, your app will automatically update and reflect these changes — this is powered by [Fast Refresh](https://reactnative.dev/docs/fast-refresh).

1. Open `App.tsx` in your text editor of choice and edit some lines.
2. For **Android**: Press the <kbd>R</kbd> key twice or select **"Reload"** from the **Developer Menu** (<kbd>Ctrl</kbd> + <kbd>M</kbd> (on Window and Linux) or <kbd>Cmd ⌘</kbd> + <kbd>M</kbd> (on macOS)) to see your changes!
When you want to forcefully reload, for example to reset the state of your app, you can perform a full reload:

For **iOS**: Hit <kbd>Cmd ⌘</kbd> + <kbd>R</kbd> in your iOS Simulator to reload the app and see your changes!
- **Android**: Press the <kbd>R</kbd> key twice or select **"Reload"** from the **Dev Menu**, accessed via <kbd>Ctrl</kbd> + <kbd>M</kbd> (Windows/Linux) or <kbd>Cmd ⌘</kbd> + <kbd>M</kbd> (macOS).
- **iOS**: Press <kbd>R</kbd> in iOS Simulator.

## Congratulations! :tada:

Expand All @@ -62,11 +80,11 @@ You've successfully run and modified your React Native App. :partying_face:
### Now what?

- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps).
- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started).
- If you're curious to learn more about React Native, check out the [docs](https://reactnative.dev/docs/getting-started).

# Troubleshooting

If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page.
If you're having issues getting the above steps to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page.

# Learn More

Expand Down
4 changes: 2 additions & 2 deletions example/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ buildscript {
minSdkVersion = 24
compileSdkVersion = 35
targetSdkVersion = 34
ndkVersion = "26.1.10909125"
kotlinVersion = "1.9.24"
ndkVersion = "27.1.12297006"
kotlinVersion = "2.0.21"
}
repositories {
google()
Expand Down
2 changes: 2 additions & 0 deletions example/ios/OrientationDirectorExample-Bridging-Header.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "OrientationDirector.h"
Loading
Loading